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:因為個人比較喜歡這種內容細分,讓我排除錯誤或者開發更加便捷。

 

 

 

🆗完結!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM