1. 程式人生 > >在C#代碼中應用Log4Net(三)Log4Net中配置文件的解釋

在C#代碼中應用Log4Net(三)Log4Net中配置文件的解釋

images rdquo files read 出現 插入 tof stat 日誌

<log4net>
  <!-- 錯誤日誌類-->
  <logger name="logerror">
    <level value="ALL" />
    <appender-ref ref="ErrorAppender" />
  </logger>
  <!-- 信息日誌類 -->
  <logger name="loginfo">
    <level value="ALL" />
    <appender-ref ref="InfoAppender" />
  </logger>
  <!-- 錯誤日誌附加介質-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\\LogError\\" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="10240" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n異常時間:%d [%t] &lt;BR&gt;%n異常級別:%-5p &lt;BR&gt;%n異 常 類:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
  <!-- 信息日誌附加介質-->
  <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\\LogInfo\\" />
    <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&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <!-- 信息日誌布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日誌時間:%d [%t] &lt;BR&gt;%n日誌級別:%-5p &lt;BR&gt;%n日 誌 類:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
</log4net>
技術分享

先不分析上面這段配置信息是什麽意思。我們先來回想一下我們的日誌類通常用來做什麽,假設我們有一個庫存管理系統,分為兩大模塊,一個是出庫,一個是入庫。我們可能想要出庫的相關信息保存在某一個文件夾裏面,入庫的信息存在另一個文件夾裏面。這樣,我們通常的做法是用在日誌類中不同的路徑將日誌寫到不同位置,但是如果我們不單單想要寫到日誌文件中,而且想要將這些日誌文件插入數據庫呢?一般來講,我們會再建立一些方法,來寫到數據庫。另外,正常日誌信息和錯誤日誌信息的布局,我們可能想要根據日誌類型的不同,改變信息的布局,比如錯誤日誌裏面有異常信息的記錄,正常日誌裏面就沒有異常的記錄。

總結地說,我們的日誌類的需求通常就是:1、能夠按要求將日誌寫到不同的介質上(文件、數據庫、郵件等);2、能夠根據日誌類型的不同,寫到不同的位置;3、能根據信息的類型,改變日誌的布局。

不得不說,想要寫好一個日誌記錄類還是挺不容易的的,看是簡單的需求要做好,也是需要下大工夫的。而這些在Log4Net中,只需要經過一些配置,就可以完成。如果你懶得寫配置信息,也可以直接將上面的配置信息拷過去用。

配置文件中節點的解釋

logger是負責日誌的記錄者,假設我們需要記錄一些正常的運行時日誌和出現異常時的錯誤日誌,那麽我們可以通過在配置文件當中添加兩個Logger實現。
appender提供記錄的介質,前面談到,我們可能要同時將數據記錄到文件和數據庫中,我們可以簡單地通過編寫appender實現,而且Log4Net當中已經默認提供了一些常用的appender,我們可以簡單地修改一些配置文件就實現同時向數據庫和同時向文件中寫入的功能。

layout負責把記入的內容格式化。其實就是決定日誌文件要長什麽樣子。

Logger節點的解釋

錯誤日誌類為例進行解釋

<!-- 錯誤日誌類-->
  <logger name="logerror">              <!-- 日誌類的名字-->
    <level value="ALL" />               <!-- 定義記錄的日誌級別-->
    <appender-ref ref="ErrorAppender" /><!-- 記錄到什麽介質中-->
  </logger>

level定義記錄的日誌級別,就是說,你要記錄哪個級別以上的日誌,級別由高往低依次是:

None
Fatal
ERROR
WARN
DEBUG
INFO
ALL

級別的定義要註意,如果你定義DEBUG,那麽低於DEBUG級別以下的信息,將不會記入日誌,啥意思呢?就是說,就算你在程序裏,用log.info()來寫入一個日誌信息,可是你在配置中指定level為DEBUG,由於INFO級別低於DEBUG,所以,不會被記入日誌.這樣的處理非常靈活

appender-ref定義日誌要寫入到什麽介質中中。上面例子中就是寫入到ErrorAppender這個介質中,在ErrorAppender節點我們可以定義跟日誌有關的要寫入到什麽地方,日誌文件的格式是什麽等信息。

appender節點的解釋

ErrorAppender為例

技術分享
<!-- 錯誤日誌附加介質-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">  <!-- name屬性指定其名稱,type則是log4net.Appender命名空間的一個類的名稱,意思是,指定使用哪種介質-->
    <param name="File" value="Log\\LogError\\" /> <!-- 輸出到什麽目錄-->
    <param name="AppendToFile" value="true" /><!-- 是否覆寫到文件中-->
    <param name="MaxSizeRollBackups" value="100" /><!-- 備份文件的個數-->
    <param name="MaxFileSize" value="10MB" /><!-- 單個日誌文件最大的大小-->
    <param name="StaticLogFileName" value="false" /><!-- 是否使用靜態文件名-->
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" /><!-- 日誌文件名-->
    <param name="RollingStyle" value="Date" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n異常時間:%d [%t] &lt;BR&gt;%n異常級別:%-5p &lt;BR&gt;%n異 常 類:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
技術分享

appender節點中,type=RollingFileAppender 的意思是將日誌以回滾文件的形式寫到文件中。

File節點中規定了文件要寫入到什麽目錄中,上例中的“Log\\LogError\\”代表寫入到“程序輸入目錄(Debug目錄)\Log\LogError\”文件夾中。

AppendToFile節點規定了是否覆寫到文件中。假設我們已經有了一個20131028.htm日誌文件,當為true的時候,日誌文件會附加到這個文件上。為false的時候,Log4Net會先將原來的日誌文件備份,生成一個新的日誌文件(見下圖)。

技術分享

MaxFileSize 最大的文件大小。我們可以使用"KB", "MB" 或 "GB"為 MaxFileSize 作為後綴限定大小。默認的文件大小是10MB。

RollingStyle是文件創建的方式。上例中市設置為以Date方式創建新文件。

DatePattern 日期格式,當我們設置了RollingStyle 為Date方式後,Log4Net會自動使用DatePattern 中的日期格式來創建新的日誌文件。

MaxSizeRollBackups這個屬性用來設置,當日誌文件達到MaxFileSize大小,就自動創建備份文件。備份文件的多少由MaxSizeRollBackups決定。比如說,我們是以日期格式作為日誌文件名的,假設今天是2013-10-28,那麽今天創建的日誌文件名就是20131028.htm,當這個文件中要超過MaxFileSize的時候,Log4Net就自動將老的20131028.htm改名為20131028.htm.1,並創建一個新的20131028.htm文件。

StaticLogFileName 是否采用靜態文件名。因為我們這個例子是采用以日期作為文件名,每天的日誌文件的名字都是動態的,所以上例中為false。如果采用靜態文件名,那麽日誌文件的名字就是唯一確定的。可以參考下面的配置文件進行設置。下面的配置文件中就是采用靜態文件名,生成的日誌文件名都是log.txt。

技術分享
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
技術分享

layout就是布局。Layout中的ConversionPattern就是日誌文件的格式,一些符號的介紹附加在下面。由於格式化的方式比較多,除了下面介紹的,大家也可以自己看看官方文檔。

%m[%message] 輸出的日誌消息
%n 換行
%d[%datetime] 輸出當前語句運行的時刻
%r 輸出程序從運行到執行到當前語句時消耗的毫秒數
%d 當前語句所在的線程ID
%p 日誌的當前優先級別
%c 當前日誌對象的名稱
%L 輸出語句所在的行號
%F 輸出語句所在的文件名
%-數字 表示該項的最小長度,如果不夠,則用空格填充

在C#代碼中應用Log4Net(三)Log4Net中配置文件的解釋