zoukankan      html  css  js  c++  java
  • .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>
    
  • 相关阅读:
    百度地图Api 根据两个坐标点计算距离
    Android 6.0 Permission权限与安全机制
    CentOS安装nginx
    CentOS安装mysq
    CentOS安装JDK
    -bash: /root/java/jdk/bin/java: cannot execute binary file
    数据库连接池之_DButils
    数据库连接池之_c3p0
    数据库连接池之_Druid简单使用
    后台管理平台编辑表格
  • 原文地址:https://www.cnblogs.com/memoyu/p/14076675.html
Copyright © 2011-2022 走看看