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">
        <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" />
      
      <appender-ref ref="RollingFile"  />
      <appender-ref ref="AppLogs"  />
      
    root>
    
    <logger name="LLZ.Project.WebApi.Middleware.RequestLogMiddleware">
      <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 配置分多个文件记录日志(不同日志级别)_第1张图片

 

 

 

完结!!!

 

你可能感兴趣的:(Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别))