.NET Core 3.1 + Log4Net 配置多个不同日志输出

关键词:.NET Core 3.1;Log4Net;多日志分隔;

认知尚浅,如有高见,愿闻其详。

需求

  在开发中,我们常常会遇到这样一种业务场景,目前在开发的A系统,需要去调用某个机构、某个公司B系统的接口,以此满足A系统的业务需求。这就衍生出一个问题,为了后期排错方便,我们不能把调用B系统的接口日志与我们A系统的日志记录在一起,需要进行分开文件夹管理。

Log4Net下解决思路

  碎碎念:起初,想到的很简单,不就是多个LogHelper类的问题嘛,直接new 一个就行了。但是看了实际情况,并不是这样的,Log4Net在我目前的使用中只需要进行配置文件的配置后注入就可以使用了(没有深入的了解),后来尝试着往配置文件上去实现,想着,多加一个Info标签不就好了,当然,肯定没实现(太年轻)日志全记一起了,只能够爬帖子了。网上找了一大堆的方式,最后发现,通过增加节点,进行配置即可实现。

  1、配置中添加节点,进行日志输出配置

  2、创建多个LogHelper(根据需要创建),并进行GetLogger("name")获取ILog实例

  3、日志记录

  其实实现很简单,就是根据logger节点名称,去获取配置新,生成log实例,并进行配置后进行日志输出。

步骤

1、配置节点,以及节点下的appender(自行配置),将输出文件地址、文件名改改就OK了

<logger name="Transfer"  additivity="false">
    <level value="ALL" />
    <appender-ref ref="TransferErrorAppender" />
    <appender-ref ref="TransferInfoAppender" />
</logger>

其中additivity="false"是一定要配置的,不然会继承root节点的appender,导致日志依旧会混进住日志中

2、创建LogHelper

   public static readonly log4net.ILog log = log4net.LogManager.GetLogger("Transfer");
   static LogHelper()
   {
       log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
   }

    public static void Info(string info)
    {
        if (log.IsInfoEnabled)
        {
            log.Info(info);
        }
     }

完整配置:

<log4net>
  <!-- 错误日志附加介质-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件路径-->
    <param name="File" value="ApiLogs\\ApiLogs\\" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->
    <param name="MaxSizeRollBackups" value="1000" />
    <!--最大文件大小-->
    <param name="MaxFileSize" value="10240" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:年-月/年-月-日/2008-08-31_ERROR.log-->
    <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'ERROR'.'log'" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n==========%n【日志级别】:%-5level%n【记录时间】:%date %n【执行时间】:[%r]毫秒%n%message%n" />
    </layout>

    <!--FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="FATAL" />
    </filter>
  </appender>
  
  <!-- 信息日志附加介质-->
  <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件路径-->
    <param name="File" value="ApiLogs\\ApiLogs\\" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="1" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:年-月/年-月-日/2008-08-31_INFO.log-->
    <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'INFO'.'log'" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n"  />
    </layout>
    <!--FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    </filter>
  </appender>

  <!-- 信息日志附加介质-->
  <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件路径-->
    <param name="File" value="ApiLogs\\ApiLogs\\" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="1" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:年-月/年-月-日/2008-08-31_DEBUG.log-->
    <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'DEBUG'.'log'" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n"  />
    </layout>
    <!--FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="DEBUG" />
    </filter>
  </appender>

  <!-- 错误日志附加介质-->
  <appender name="TransferErrorAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件路径-->
    <param name="File" value="ApiLogs\\TransferLogs\\" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->
    <param name="MaxSizeRollBackups" value="1000" />
    <!--最大文件大小-->
    <param name="MaxFileSize" value="10240" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:年-月/年-月-日/2008-08-31_ERROR.log-->
    <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'ERROR'.'log'" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n==========%n【日志级别】:%-5level%n【记录时间】:%date %n【执行时间】:[%r]毫秒%n%message%n" />
    </layout>

    <!--FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="FATAL" />
    </filter>
  </appender>


  <!-- 信息日志附加介质-->
  <appender name="TransferInfoAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志文件路径-->
    <param name="File" value="ApiLogs\\TransferLogs\\" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="1" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:年-月/年-月-日/2008-08-31_INFO.log-->
    <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'INFO'.'log'" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <!--信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n"  />
    </layout>
    <!--FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    </filter>
  </appender>
  
  <root>
    <level value="ALL" />
    <appender-ref ref="InfoAppender" />
    <appender-ref ref="ErrorAppender" />
    <appender-ref ref="DebugAppender" />
  </root>


  <logger name="Transfer"  additivity="false">
    <level value="ALL" />
    <appender-ref ref="TransferErrorAppender" />
    <appender-ref ref="TransferInfoAppender" />
  </logger>
  
</log4net>
posted @ 2020-12-09 23:31  Memoyu  阅读(673)  评论(0编辑  收藏  举报