ErrorLogger

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();
        }

Download