Wednesday, May 28, 2025

How to Use log4net for Logging in C# Applications

Logging is a crucial aspect of software development, helping you track issues, monitor behavior, and maintain applications more effectively. log4net is a powerful, flexible logging library for .NET applications, inspired by the Java-based log4j. This guide shows how to integrate log4net into a C# project with a working example.

Key Features of log4net

  • Easy to configure via XML or code.
  • Supports multiple logging targets (file, console, event log, etc.).
  • Thread-safe logging.
  • Fine-grained control over log levels: DEBUG, INFO, WARN, ERROR, FATAL.

Step-by-Step Guide:


1. Install log4net via NuGet

Open the NuGet Package Manager Console and run:

Install-Package log4net

2. Add Configuration in App.config or Web.config

Add the following inside your configuration file:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\\app.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>
Note: Ensure the Logs folder exists or your application has permission to create/write to it.

3. Initialize and Use log4net in C# Code

Here’s a simple example in Program.cs:

using System;
using log4net;
using log4net.Config;
using System.Reflection;

class Program
{
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    static void Main(string[] args)
    {
        XmlConfigurator.Configure(); // Loads config from App.config
        log.Info("Application started");

        try
        {
            int a = 10, b = 0;
            int result = a / b;
        }
        catch (Exception ex)
        {
            log.Error("An error occurred", ex);
        }

        log.Warn("This is a warning");
        log.Debug("Debug message");
        log.Fatal("Fatal error simulation");

        Console.WriteLine("Done. Check the Logs folder.");
    }
}

Output Example

This configuration writes logs to Logs\app.log with entries like:

2025-05-28 10:35:14,553 [1] INFO  Program - Application started
2025-05-28 10:35:14,559 [1] ERROR Program - An error occurred
System.DivideByZeroException: Attempted to divide by zero.
   at Program.Main(String[] args)

No comments:

Post a Comment