.NET8 牵手 Log4Net:日志界 “最佳 CP” 出道,调试再也不秃头!

Log4net介绍

Log4Net 是 Apache 软件基金会为 .NET 平台开发的日志记录库,广泛用于记录和管理日志信息。它支持多种日志级别和输出目标,能够帮助开发者更高效地调试和监控应用程序。

安装和配置 Log4Net

首先,通过 NuGet 安装以下包:

  • log4net
  • Microsoft.Extensions.Logging.Log4Net.AspNetCore
  • 需要以JOSN格式来打印日志的还需要安装 log4net.Ext.Json

配置文件

创建log4net.config配置文件,定义日志记录的规则和输出格式。例如:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender">
    <!-- 基础配置 -->
    <file value="logs\application.log" />
    <appendToFile value="true" />
	<!-- 滚动策略:Size(按大小)| Date(按日期)| Composite(组合) -->
    <rollingStyle value="Composite" />
    <!-- 文件大小限制 -->
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="10" />
    <!-- 日期模式 -->
    <datePattern value="yyyyMMdd" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
      <!-- 使用标准类型装饰器 -->
      <decorator type="log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json" />
      <!-- 自定义要输出的字段 -->
      <member value="time:date" />
      <member value="level:level" />
      <member value="logger:logger" />
      <member value="message:messageObject" />
      <member value="exception:exception" />
      <!-- 添加自定义属性 -->
      <member value="thread:thread" />
      <member value="user:username" />
      
      <!-- 默认输出所有属性 -->
      <!-- <default /> -->
    </layout>
  </appender>

  <appender name="JsonConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
      <decorator type="log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json" />
      <member value="time:date" />
      <member value="level:level" />
      <member value="message:messageObject" />
      <default />
    </layout>
  </appender>

  <root>
    <level value="INFO" />
     <!-- 日志文件打印 -->
    <appender-ref ref="JsonFileAppender" />
     <!-- 控制台打印 -->
    <appender-ref ref="JsonConsoleAppender" />
  </root>
</log4net>

在项目中集成 Log4Net

Program.cs 文件中初始化 Log4Net:

C# 复制代码
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddLog4Net("log4net.config");
var app = builder.Build();
app.Run();

实际使用

C# 复制代码
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(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        _logger.LogInformation("LogInformation......");
        _logger.LogError("LogError......");
        _logger.LogWarning("LogWarning......");
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

打印效果

总结

Log4Net 提供了灵活的日志记录功能,支持多种输出目标和日志格式。在 .NET 8 中,通过简单的配置和集成,可以快速实现高效的日志管理,帮助开发者更好地监控和调试应用程序。`

相关推荐
GetcharZp3 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko3 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界3 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan3 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌3 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang09074 小时前
自己动手写一个spring之IOC_2
java·后端·spring
ltl4 小时前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl4 小时前
架构视图与文档:C4 模型从入门到实战
后端
IT_陈寒7 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海7 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask