Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)

Posted 飞天猪皮怪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)相关的知识,希望对你有一定的参考价值。

介绍

本文所有配置都是在core3.1环境下。

首先看看最终的效果。

 

 

请求监控:对每次请求的相关信息做一个记录。

全局异常:我不想我的错误信息,跟其他的信息混合在一起,查看的时候不大方便。

应用日志:这个主要用于记录生产环境的一些调试信息。 

这里关于关于Log4Net在Core中的配置我就不叙述了,百度一大把的。。

下面重点介绍配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <!--全局异常日志-->
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
      <file value="logs/全局异常/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd\'.log\'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="2MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter"><!--日志过滤器:日志最大级别和最小级别。我现在的是全局错误记录所以限定级别为Error-->
        <levelMin value="Error" />
        <levelMax value="Error" />
      </filter>
    </appender>
    <!--监控日志-->
    <appender name="MonitorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="logs/请求监控/" />
      <param name="AppendToFile" value="true" />
      <param name="MaxFileSize" value="10240" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyyMMdd\'.log\'" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="Warn" />
        <levelMax value="Warn" />
      </filter>
    </appender>
    <!--程序日志-->
    <appender name="AppLogs" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="logs/应用日志/" />
      <param name="AppendToFile" value="true" />
      <param name="MaxFileSize" value="10240" />
      <param name="MaxSizeRollBackups" value="100" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyyMMdd\'.log\'" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date{yyyy-MM-dd HH:mm:ss fff} %n线程ID:[%thread] %n日志级别:%-5level %n跟踪描述:%message%newline %n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="Info" />
      </filter>
    </appender> 
    <root>
      <level value="All"/>
      <appender-ref ref="MonitorAppender" />
      <!--<level value="Debug" />-->
      <appender-ref ref="RollingFile"  />
      <appender-ref ref="AppLogs"  />
      <!--<appender-ref ref="DebugAppender" />-->
    </root>
    <!--请求日志记录-->
    <logger name="LLZ.Project.WebApi.Middleware.RequestLogMiddleware"><!--这个name的命名的意思是:是我中间件cs文件的命名空间-->
      <level value="Warn" />
    </logger>
    <!--全局错误记录-->
    <logger name="LLZ.Project.WebApi.Filters.SysExceptionFilter">
      <level value="Error" />
    </logger>
    <!--调试,以及生产环境日志-->
    <logger name="LLZ.Project.WebApi.Helper.LogHelper">
      <level value="DEBUG" />
      <level value="INFO" />
    </logger>
  </log4net>
</configuration>

列一下Log4的日志级别等级,优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

首先这个多文件夹的实现思路,需要配置多次。而且每个配置的日志级别是做了限制的。

比如我的全局错误记录,用的日志级别是Error,那么我要实现的效果就是这个文件夹下的所有日志都只记录错误信息,所以我在配置的时候在过滤器中完全限定为Error。

这里说一下我踩的坑,在配置应用日志的时候,我一直没有在过滤器中加上LevelMax,从而导致我的请求记录都记录到了这个日志文件里面。这是因为优先级的原因,因为我请求记录日志的级别是Warn,

比Info高,所以才会出现这种情况,之后我加上LevelMax完全限定死,就没有这种情况了。

ps:因为个人比较喜欢这种内容细分,让我排除错误或者开发更加便捷。

 

 

 

以上是关于Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)的主要内容,如果未能解决你的问题,请参考以下文章

[Asp.Net Core]log4net组件使用

Asp.net core 使用log4net作为日志组件,记录日志到本地。

Log4net系列一: asp.net 配置 Log4net 之文本格式输出

log4net在Asp.net Mvc中的应用配置与介绍

log4net 使用总结- 在ASP.NET MVC 中使用

ASP.NET MVC中Log4Net记录错误日志的使用