1. 程式人生 > 實用技巧 >ASP.NET Core使用log4net記錄日誌

ASP.NET Core使用log4net記錄日誌

 .NET常用的日誌元件有NLog、Log4net等,.NET CORE下微軟也自帶了日誌元件,到目前為止還沒用過,而我本人常用的是log4net,下面簡單講講.NET CORE下怎麼使用log4net記錄日誌。

  新建一個ASP.NET CORE專案,為專案新增log4net程式包,

  

  並新增log4net.config檔案,

  

log4net.config檔案配置如下:(log4net的具體配置我就不講了,部落格園裡很多)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?
xmlversion="1.0" encoding="utf-8" ?> <configuration> <!-- This section contains the log4net configuration settings --> <log4net> <appendername="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <filevalue="Log/" /> <appendToFilevalue="true" /> <
rollingStylevalue="Composite" /> <staticLogFileNamevalue="false" /> <datePatternvalue="yyyyMMdd'.log'" /> <maxSizeRollBackupsvalue="10" /> <maximumFileSizevalue="50MB" /> <layouttype="log4net.Layout.PatternLayout"> <conversionPatternvalue="%date [%thread] %-5level %message%newline" />
</layout> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <levelvalue="ALL" /> <appender-refref="RollingLogFileAppender" /> </root> </log4net> </configuration>

  接下來編寫一個記錄日誌的公共類程式碼如下:(本人看到有些開發者將ILog物件直接返回,在呼叫的時候直接呼叫ILog物件的方法,這樣會造成呼叫的類庫中都必須引用log4net類庫,很麻煩,像如下封裝後呼叫的地方只需要引用Logger類所在類庫即可)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 publicclassLogger { privatestaticILog logger; staticLogger() { if(logger ==null) { varrepository = LogManager.CreateRepository("NETCoreRepository"); //log4net從log4net.config檔案中讀取配置資訊 XmlConfigurator.Configure(repository,newFileInfo("log4net.config")); logger = LogManager.GetLogger(repository.Name,"InfoLogger"); } } /// <summary> /// 普通日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> publicstaticvoidInfo(stringmessage, Exception exception =null) { if(exception ==null) logger.Info(message); else logger.Info(message, exception); } /// <summary> /// 告警日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> publicstaticvoidWarn(stringmessage, Exception exception =null) { if(exception ==null) logger.Warn(message); else logger.Warn(message, exception); } /// <summary> /// 錯誤日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> publicstaticvoidError(stringmessage, Exception exception =null) { if(exception ==null) logger.Error(message); else logger.Error(message, exception); } }

  接下來就是在任意控制器或者類中使用剛編寫的Logger類來記錄日誌到檔案中

1 2 3 4 5 6 7 [HttpPost("list")] publicasync Task<IActionResult> CarList() { varmsg = await service.GetCarList(Request); Logger.Info(JsonConvert.SerializeObject(msg));//此處呼叫日誌記錄函式記錄日誌 returnJson(msg); }

  記錄的日誌在Log檔案目錄中:

開啟檔案檢視日誌內容如下所示:

如果需要限制歷史日誌檔案儲存最大數量,請將<rollingStyle value="Composite" />改為:<rollingStyle value="Size" />,此時,maxSizeRollBackups配置才會生效。

修改後的log4net.config內容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- This section contains the log4net configuration settings -->
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="50MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  [%thread]  %-5level  %message%newline" />
      </layout>
    </appender>
    
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>

  </log4net>
</configuration>

注意,如果Logger類中丟擲FileNotFoundException異常,說明目錄下未找到log4net.config檔案,這時請在專案log4net.config檔案上右鍵——屬性——將“複製到輸出目錄”項的值改為“始終複製”即可。

引用: