1. 程式人生 > >log4net按照日誌等級生成相應的日誌檔案(多檔案配置)

log4net按照日誌等級生成相應的日誌檔案(多檔案配置)

log4是日常開發中使用比較多的日誌記錄工具,先放一段關於log4net Loggers的基本說明:
Logger是直接和應用程式互動的元件。Logger只是產生日誌,然後由它引用的Appender記錄到指定的媒介,並由Layout控制輸出格式。

Logger提供了多種方式來記錄一個日誌訊息,也可以有多個Logger同時存在。每個例項化的Logger物件對被log4net作為命名實體(Named Entity)來維護。log4net使用繼承體系,也就是說假如存在兩個Logger,名字分別為a.b.c和a.b。那麼a.b就是a.b.c的祖先。每個Logger都繼承了它祖先的屬性。所有的Logger都從Root繼承,Root本身也是一個Logger。

日誌的等級,它們由高到底分別為:

OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL

高於等級設定值方法(如何設定參見“配置檔案詳解”)都能寫入日誌, Off 所有的寫入方法都不寫到日誌裡,ALL則相反。例如當我們設成Info時,logger.Debug就會被忽略而不寫入檔案,但是FATAL,ERROR,WARN,INFO會被寫入,因為他們等級高於INFO。

在具體寫日誌時,一般可以這樣理解日誌等級:

FATAL(致命錯誤):記錄系統中出現的能使用系統完全失去功能,服務停止,系統崩潰等使系統無法繼續執行下去的錯誤。例如,資料庫無法連線,系統出現死迴圈。

ERROR(一般錯誤):記錄系統中出現的導致系統不穩定,部分功能出現混亂或部分功能失效一類的錯誤。例如,資料欄位為空,資料操作不可完成,操作出現異常等。

WARN(警告):記錄系統中不影響系統繼續執行,但不符合系統執行正常條件,有可能引起系統錯誤的資訊。例如,記錄內容為空,資料內容不正確等。

INFO(一般資訊):記錄系統執行中應該讓使用者知道的基本資訊。例如,服務開始執行,功能已經開戶等。

DEBUG (除錯資訊):記錄系統用於除錯的一切資訊,內容或者是一些關鍵資料內容的輸出。
下面演示根據每個日誌等級生成對應的一個檔案。

這是本篇例項生成的日誌的結構:
日誌結構
每個檔案下分別存放相應等級的日誌,日誌的檔名為當前日期,每天一個檔案(可以自行配置):
這裡寫圖片描述

1、配置檔案:
路徑和檔名為(專案根目錄下):Config/log4net.config
建成檔案後不要忘記在Vissual Studio中右鍵該檔案 -> 屬性 -> 如果較新則複製到輸出目錄,如下圖:

這裡寫圖片描述

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
  </root>
  <logger name="RollingLogFileAppender">
    <level value="ALL" />
    <appender-ref ref="RollingFileDebug" />
    <appender-ref ref="RollingFileInfo" />
    <appender-ref ref="RollingFileWarn" />
    <appender-ref ref="RollingFileError" />
    <appender-ref ref="RollingFileFatal" />
  </logger>
  <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Debug/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    </layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="Debug" />
      <param name="LevelMax" value="Debug" />
    </filter>
  </appender>
  <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Info/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    </layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    </filter>
  </appender>
  <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Warn/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    </layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="WARN" />
      <param name="LevelMax" value="WARN" />
    </filter>
  </appender>
  <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Error/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    </layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
    </filter>
  </appender>
  <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Fatal/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    </layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="FATAL" />
      <param name="LevelMax" value="FATAL" />
    </filter>
  </appender>

</log4net>

2、引入配置檔案

這行程式碼放在專案的 AssemblyInfo.cs 檔案的任意行,也可以放在啟動檔案的頭部

//使用配置檔案Config/log4net.config,監視改變(改變配置檔案不用重啟程式即可生效)。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]

3、初始化Logger例項

這行程式碼放在你需要寫日誌的類中,與方法同級

public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");

4、寫日誌

Log.Fatal("這是Fatal級日誌");
Log.Error("這是Error級日誌");
Log.Warn("這是Warn級日誌");
Log.Info("這是Info級日誌");
Log.Debug("這是Debug級日誌");

像這樣子:
這裡寫圖片描述

到此,log4net使用方法便結束了,如果想知道log4net.config檔案中某個節點的意思和用法,可以直接搜尋,已經有很多文件進行說明了。