.net core 使用log4net(.net 6.0/.net 8.0)

本文介绍如何使用log4net进行日志记录配置,包括安装包、创建配置文件、定义不同级别的日志输出规则及实现日志接口的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加log4net包

Install-Package Log4net

1、建立一个log4net.config配置文件

2、输入配置内容

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>
      <!--根配置-->
      <root>
          <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
          <level value="ERROR"/>
          <level value="WARN"/>
          <level value="INFO"/>
          <level value="DEBUG"/>
          <appender-ref ref="ErrorLog" />
          <appender-ref ref="WarnLog" />
          <appender-ref ref="InfoLog" />
          <appender-ref ref="DebugLog" />
      </root>
      <!-- 错误 Error.log-->
      <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
          <!--目录路径,可以是相对路径或绝对路径-->
          <param name="File" value="Log\Error\"/>
          <!--文件名,按日期生成文件夹-->
          <param name="DatePattern" value="yyyy-MM-dd"/>
          <!--追加到文件-->
          <appendToFile value="true"/>
          <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
          <rollingStyle value="Composite"/>
          <!--写到一个文件-->
          <staticLogFileName value="false"/>
          <!--单个文件大小。单位:KB|MB|GB-->
          <maximumFileSize value="200MB"/>
          <!--最多保留的文件数,设为"-1"则不限-->
          <maxSizeRollBackups value="-1"/>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="ERROR" />
              <param name="LevelMax" value="ERROR" />
          </filter>
      </appender>
 
      <!-- 警告 Warn.log-->
      <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
          <!--目录路径,可以是相对路径或绝对路径-->
          <param name="File" value="Log\Warn\"/>
          <!--文件名,按日期生成文件夹-->
          <param name="DatePattern" value="yyyy-MM-dd"/>
          <!--追加到文件-->
          <appendToFile value="true"/>
          <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
          <rollingStyle value="Composite"/>
          <!--写到一个文件-->
          <staticLogFileName value="false"/>
          <!--单个文件大小。单位:KB|MB|GB-->
          <maximumFileSize value="200MB"/>
          <!--最多保留的文件数,设为"-1"则不限-->
          <maxSizeRollBackups value="-1"/>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="WARN" />
              <param name="LevelMax" value="WARN" />
          </filter>
      </appender>
 
      <!-- 信息 Info.log-->
      <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
          <!--目录路径,可以是相对路径或绝对路径-->
          <param name="File" value="Log\Info\"/>
          <!--文件名,按日期生成文件夹-->
          <param name="DatePattern" value="yyyy-MM-dd"/>
          <!--追加到文件-->
          <appendToFile value="true"/>
          <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
          <rollingStyle value="Composite"/>
          <!--写到一个文件-->
          <staticLogFileName value="false"/>
          <!--单个文件大小。单位:KB|MB|GB-->
          <maximumFileSize value="200MB"/>
          <!--最多保留的文件数,设为"-1"则不限-->
          <maxSizeRollBackups value="-1"/>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="INFO" />
              <param name="LevelMax" value="INFO" />
          </filter>
      </appender>
 
      <!-- 调试 Debug.log-->
      <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
          <!--目录路径,可以是相对路径或绝对路径-->
          <param name="File" value="Log\Debug\"/>
          <!--文件名,按日期生成文件夹-->
          <param name="DatePattern" value="yyyy-MM-dd"/>
          <!--追加到文件-->
          <appendToFile value="true"/>
          <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
          <rollingStyle value="Composite"/>
          <!--写到一个文件-->
          <staticLogFileName value="false"/>
          <!--单个文件大小。单位:KB|MB|GB-->
          <maximumFileSize value="200MB"/>
          <!--最多保留的文件数,设为"-1"则不限-->
          <maxSizeRollBackups value="-1"/>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="DEBUG" />
              <param name="LevelMax" value="DEBUG" />
          </filter>
      </appender>
  </log4net>
</configuration>

3、创建一个日志操作接口(之后注入需要使用)

/// <summary>
/// 日志接口
/// </summary>
public interface ILogTool
{
    /// <summary>
    /// 写入错误日志
    /// </summary>
    /// <param name="errorInfo">错误日志内容</param>
    public void Error(string errorInfo);

    /// <summary>
    /// 写入消息日志
    /// </summary>
    /// <param name="info">消息日志内容</param>
    public void Info(string info);

    /// <summary>
    /// 写入警告日志
    /// </summary>
    /// <param name="warnInfo">警告日志内容</param>
    public void Warn(string warnInfo);

    /// <summary>
    /// 写入调试日志
    /// </summary>
    /// <param name="debugInfo">调试日志内容</param>
    public void Debug(string debugInfo);
}

4、编写一个日志类实现日志操作接口

/// <summary>
/// 日志工具类
/// </summary>
public class LogTool: ILogTool
{
    private readonly ILog log = LogManager.GetLogger("LogRepository", typeof(LogTool));

    /// <summary>
    /// 写入错误日志
    /// </summary>
    /// <param name="errorInfo">错误日志内容</param>
    public void Error(string errorInfo)
    {
        log.Error(errorInfo);
    }

    /// <summary>
    /// 写入消息日志
    /// </summary>
    /// <param name="info">消息日志内容</param>
    public void Info(string info)
    {
        log.Info(info);
    }

    /// <summary>
    /// 写入警告日志
    /// </summary>
    /// <param name="warnInfo">警告日志内容</param>
    public void Warn(string warnInfo)
    {
        log.Warn(warnInfo);
    }

    /// <summary>
    /// 写入调试日志
    /// </summary>
    /// <param name="debugInfo">调试日志内容</param>
    public void Debug(string debugInfo)
    {
        log.Debug(debugInfo);
    }
}

5、在Pragram.cs中加入代码

ILoggerRepository repository = LogManager.CreateRepository("LogRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));//此行文件目录为项目根目录,根据自己需要修改
builder.Services.AddSingleton<ILogTool, LogTool>();//因为日志不需要其他操作,所以这里注入的时生命周期可以使用单例

第一行中方法体内“LogRepository”为标识名,可以是任意字符串,但务必与日志实现类中

private readonly ILog log = LogManager.GetLogger("LogRepository", typeof(LogTool));

方法体内第一个参数相同,否则会报找不到名称的错误。

6、在控制器中使用方式为(获取注入)

private readonly ILogTool _logTool;

public WeatherForecastController(ILogTool logTool)
{
    _logTool = logTool;
}

方法体内使用

[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
    _logTool.Info("1");
    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();
}

此处仅为举例,具体在什么地方使用看项目需要,以上为全部内容,后续如果有需要作者会再补充,祝大家早日成为技术大牛!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值