Integrating Log4Net into ASP.NET Core Web APIs

Adding Log4Net Support

To integrate Log4Net into your ASP.NET Core application, install the Log4Net and Microsoft.Extensions.Logging.Log4Net.AspNetCore NuGet packages.

Setting Up Log4Net Configuration

Configuring the Log4Net Settings File

Create a configuration file named log4net.config with the following structure:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log\log.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <datePattern value="yyyyMMdd.txt" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="50MB" />
      <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>

Initializing Log4Net in Program.cs

In the Program.cs file, configure logging using the following setup:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(loggingBuilder =>
        {
            loggingBuilder.AddLog4Net("Config/log4net.config");
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Implementing Logging in Controllers

Utilize dependency injection to access the logger within your controllers:

[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        _logger.LogInformation("Fetching weather forecast data");

        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Filtering Default Logs

To suppress default system logs, apply filters in the logging builder:

loggingBuilder.AddFilter("System", LogLevel.Information);
loggingBuilder.AddFilter("System", LogLevel.Warning);
loggingBuilder.AddFilter("Microsoft", LogLevel.Information);
loggingBuilder.AddFilter("Microsoft", LogLevel.Warning);
loggingBuilder.AddFilter("Microsoft.Hosting.Lifetime", LogLevel.Information);
loggingBuilder.AddFilter("Microsoft.Hosting.Lifetime", LogLevel.Warning);

Tags: aspnet-core Log4Net logging web-api

Posted on Wed, 28 Oct 2026 16:07:28 +0000 by Pigmaster