A .NET Framework library for logging application errors (handled/unhandled) and messages the application “want’s” to log.
Features
- Current version 1.0.0.4 (12.03.2019)
- Logs application errors/exceptions unhandled automatically.
- Logs handled errors/exceptions if the user wants to do so in the exception catch block.
- Logs messages given by the user at a point of code.
- Logged errors go to a file called “%LOCALAPPDATA%\[Application product name]\trace_error.log”.
- Logged messages go to a file called “%LOCALAPPDATA%\[Application product name]\app_messages.log”.
- A thread that truncates the log from the beginning of the file to about 10000 lines depending on the next “MESSAGE BEGIN..” line hourly if necessary.
- Full XML documentation is included (public/private)
- A sample application is included (both WPF and WinForms).
Notes
I developed this library while tracing the bug that lead to a crash of the SimpleBackup software because of the missing Visual C++ Redistributable Package.
Requirements
- A Microsoft® Windows® supporting .NET Framework v.4.5 (possibly downgradable by modifying the source project settings)
- LGPL v3 compatible application
Changes
- v.1.0.0.1 (20.10.2015)
- Fixed app_messages.log truncation on application start
- Added product name and version to be logged as well
- v.1.0.0.4 (12.03.2019)
- Fixed file sharing issue if multiple instance of a same program were active
Screenshots
A text editor showing trace_error.log file
A text editor showing app_messages.log file
A WPF sample application
Using in an application
WinForms
The library in WinForms must be “bound” before any forms are created (Program.cs).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using VPKSoft.ErrorLogger; // reguired
namespace WinFormsTest
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ExceptionLogger.Bind(); // bind before any visual objects are created
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
ExceptionLogger.UnBind(); // unbind so the truncate thread is stopped successfully
}
}
}
WPF
The library can be “bound” in the main window constructor.
using VPKSoft.ErrorLogger; // reguired
namespace WPFTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ExceptionLogger.Bind(); // bind
ExceptionLogger.LogMessage("Application start: " + System.Windows.Application.ResourceAssembly.GetName().Name);
}
}
The library can be “unbound” in the main window’s Closing event.
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// unbind so the truncate thread is stopped successfully
ExceptionLogger.UnBind();
}