1. 程式人生 > >NetCore log4net 整合以及配置日誌資訊不重複顯示或者記錄

NetCore log4net 整合以及配置日誌資訊不重複顯示或者記錄

NetCore log4net 整合,這是一個很常見而且網上大批大批的博文了,我寫這個博文主要是為了記錄我在使用過程中的一點小收穫,以前在使用的過程中一直沒有注意但是其實網上說的不清不楚的問題。

官方文件的連結:http://logging.apache.org/log4net/release/manual/configuration.html  

 
  
  
<log4net>
    <!-- A1 is set to be a ConsoleAppender -->
    <appender name="A1" type="log4net.Appender.ConsoleAppender"
> <!-- A1 uses PatternLayout --> <layout type="log4net.Layout.PatternLayout"> <!-- Print the date in ISO 8601 format --> <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /> </layout> </
appender> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log-file.log" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"
/> </layout> </appender> <!-- Set root logger level to DEBUG and its only appender to A1 --> <logger name="WYCms.Api"> <level value="info" /> <appender-ref ref="ManagedColoredConsoleAppender" /> </logger> <logger name="WYCms.Api.Controller" additivity="false"> <level value="Error" /> <appender-ref ref="ManagedColoredConsoleAppender" /> </logger> </logger> </log4net>

相信這段配置很平常,但是我們如何實現,在專案中只不讓日誌重複顯示資訊,只顯示,為此,我通讀了:http://logging.apache.org/log4net/release/manual/configuration.html  這裡關於log4net各個引數的說明以及示例。

1.首先理解,上面的 root 和logger,最後的效果是什麼,首先,配置了root 以及 自定義的logger,那麼按照官方的文件上面來說,這時候就會生成:

log-file.log  檔案,以及在 控制檯下面按色彩打印出相關lever級別的資訊,通過驗證發現,確實如此.

 

 

2  理解logger段的配置, <logger name="WYCms"> 這裡的name代表我們專案的一個名稱空間,注意,這裡是專案的名稱空間的名稱,度娘上各種千奇百怪的東西,如果照抄,你可能可以得到日誌,但是你永遠得不到你想到或者只需要的日誌,而且logger的配置是繼承自root的配置資訊的,這就是為什麼會有重複的日誌產生的原因。

我分別寫在這樣的程式碼:

現在我們來看上面的配置資訊:

root 日誌級別配置的為:ALL 

logger  name="WYCms.Api"  日誌級別配置為:info

logger name="WYCms.Api.Controller" additivity="false" 日誌級別為:error 並且 additivity配置為false,阻止向父級繼承,也就是說,在名稱空間WYCms.Api.Controller下寫的日誌資訊,只會保留error級別的日誌資訊,不會同步記錄到 logger name="WYCms.Api"以及root中,而由於 logger name="WYCms.Api"沒有阻止繼承,那麼,在名稱空間"WYCms.Api"產生的日誌資訊,也會同步記錄到root配置的日誌資訊中。我們來測試一下,是否正確,如下圖:

與我們預料中的一樣,再來測試,在controller級別的日誌資訊是否只顯示error級別的資訊,並且不會記錄到其父級中去。

與我們期望的一模一樣,至此,日誌記錄配置完畢,注意以上的問題,你就可以隨心配置以及記錄各種各樣的日誌檔案了,其它的依此類推