.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 中,通过简单的配置和集成,可以快速实现高效的日志管理,帮助开发者更好地监控和调试应用程序。`

相关推荐
程序员David7 小时前
我让 Claude 从架构文档一路干到代码,踩了三个坑才摸清边界
后端
Zane19947 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
神奇小汤圆7 小时前
线程池拒绝策略CallerRunsPolicy反而卡死了主线程
后端
神奇小汤圆7 小时前
Jaws:从零构建一个”五脏俱全”的 Java RPC 框架
后端
Csvn8 小时前
📊 SQL 入门 Day 10:递归 CTE — 破解无限层级查询的终极武器
后端·sql
echohelloworld118 小时前
HarmonyOS开发实战:小分享-CreateSelectPage创建分享类型选择器
后端
啊湘8 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
用户69371750013848 小时前
从代码生产者到 AI 协作者:软件工程师的角色重构
android·前端·后端
Java内核笔记8 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端
码栈研说9 小时前
Go 语言大白话入门 10 - 排序与常用数据操作
后端·程序员