.NET Logging Your Way
Loupe is much more than just another logging system
Loupe integrates with your application as a TraceListener. This means that Loupe captures all calls made to the .NET Trace and Debug classes (ex., Trace.Write, Trace.WriteLine, Debug.WriteLineIf, etc). In addition, Loupe listens for and captures a great deal of additional useful information that is ignored by most .NET logging systems:
- Console.WriteLine messages are ignored by the TraceListener infrastructure, but Loupe captures these messages and tags them so that they can be easily highlighted or filtered.
- Unhandled exceptions are automatically logged by Loupe including the full stack trace and details of the exception. In addition, with Loupe it very easy to log errors and exceptions in your code. For example, if you pass an Exception object to Trace.WriteLine, the exception details and stack trace are nicely formatted when viewed in Loupe Desktop.
- .NET system events such as AssemblyLoad, NetworkAddressChanged, NetworkAvailabilityChanged, PowerModeChanged, DisplaySettingsChanged, SessionSwitch, and TimeChanged are automatically recorded by Loupe. This can be extremely helpful when troubleshooting. For example, knowing screen resolution just changed might be crucial to understanding a display update error.
- .NET performance counters (perf counters) are automatically recorded so you have running profiles of memory, processor, network and disk performance
- Detailed configuration data for the session is automatically recorded to support usage analytics and problem troubleshooting. For example, version numbers for the O/S, application and each loaded assembly are captured because version mismatches are a common root cause of user-reported problems. Likewise, knowing time zone and culture often explains logic errors in applications used internationally.
- Custom metrics can easily be defined with Loupe to capture whatever metrics provide value to your team. Typical usages include tracking feature utilization and monitoring throughput, performance, and reliability at a system or module level.
Loupe delivers the loose coupling afforded by the Observer pattern in .NET’s design of the TraceListener class then goes well beyond TraceListener capabilities to capture all the other error, usage and configuration data you need to effectively support your applications or implement a customer experience improvement program.
Safe and efficient
Loupe is designed to be used in released production systems as well as during testing. To support this, the Loupe Agent was carefully crafted to be safe and efficient:
- All API calls are thread-safe and execute on low-priority background threads to ensure that logging has imperceptible impact on application responsiveness.
- In-memory buffers are bounded with graceful handling of overflow conditions.
- Persisted data is highly compressed to keep log files small.
- Disk storage for log files is automatically and intelligently managed to ensure that Loupe will never fill up your disk. Simple configuration settings let you specify the maximum age and size for logged data as well as ensuring that no data is logged at all unless the amount of available space on the disk exceeds a threshold.
- The logging agent is designed to always fail-safe. We recognize that it’s crucial for a logging system to never be the cause of a system failure.
Loupe works with Trace, Log4Net or any .NET log framework
If you prefer, Loupe can be easily integrated with your logging framework of choice. For example, Loupe includes the “glue code” to work with log4net as a log4net Appender. In a similar way, the glue code for other logging systems can be easily developed. Drop us a line if you have integrated Loupe with another logging systems and would be willing to share your adapter with the community.
Loupe also includes its own rich logging API supporting both simple and advanced logging usages.