【Z13區】《Log4net寫出適合自己的日誌類》第二篇【沒有理論的實踐是盲目】

第一篇中,已經真刀實槍用log4net幹過了一次。也是希望大家能先感受到什麼是log4net。但是隻沒有理論的實踐肯定是盲目的,所以這一篇,

咱們好好談談log4net的配置等其他信息


log4net來源

    log4net是Apache軟件基金會Apache Logging Services工程的一部分。Apache日誌服務工程致力於爲程序調試和審計提供跨語言的日誌服務。

詳細說明,源碼下載 可以參考官網:http://logging.apache.org/log4net/   

Apache Logging Services工程其他項目:http://logging.apache.org/ 

log4net能幹哪些活?

    一個項目無論多麼nb,要是我們用不着,那基本和我們無關。所以你要用它之前,得知道他能幹哪些活。

首先log4net是用來寫日誌的。主要特性如下:

  • log4net 可實現速度優化。
  • log4net 基於已命名日誌記錄器層次結構。
  • log4net 是失敗即停,但沒有依懶性。
  • log4net 是線程安全的。
  • log4net 並不限於一組預定義的設施。可以在運行時使用一個配置文件設置日誌記錄行爲。配置文件是 XML 格式。
  • log4net 被設計來處理從一開始的異常。
  • log4net 可以其輸出定向到許多匯包括: 文件、 控制檯、 windows事件日誌或電子郵件。
  • log4net 分類分爲級別的日誌記錄: DEBUG, INFO, WARN, ERROR and FATAL.。
    日誌輸出的格式可以通過實現一個新的佈局類很容易改變。 通過編寫一個新的附加類可改變的日誌輸出,以及寫作策略目標。
  • log4net 支持多個輸出附加目的地每記錄器。

 

主要作用我已經標記背景色,它還可以將日誌輸出到數據庫中【Sqlserver、Access, Oracle、DB2,SQLite】

以上的特性和log4net日誌能輸出位置,我相信在我們編程中,基本都能滿足寫日誌的需求了。

它還有個特性,就是學習成本也低。   在第一篇中,我們也看到了,只需要一個log4net.dll和配置文件一份,就可以直接輸出日誌了。

那麼接下來,我們分析下配置文件的具體作用。

log4net結構和配置文件分析

    ps:配置文件可以自定義文件名,也可以寫在程序自帶的app.config/web.config。


 主要結構:

log4net 有四種主要的組件,分別是Logger(記錄器), Repository(庫), Appender(附着器)以及 Layout(佈局)。

作用分析:

 Logger(記錄器): 是應用程序需要交互的主要組件,它用來產生日誌消息。產生的日誌消息並不直接顯示,還要預先經過Layout的格式化處理後纔會輸出。

 Repository(庫):主要用於負責日誌對象組織結構的維護。

   Appender(附着器):  定義輸出介質。例如:輸出到文件、控制檯、數據庫、windows事件日誌、電子郵件等。

 Layout(佈局):格式化日誌信息。例如:你想做日誌信息中增加當前時間,log4net都有字符代替。[較抽象,看後面具體操作即可]


 配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <log4net>
      <!--appender節點的name可以自定義,但是root節點下的appender-ref節點的ref屬性必須對應apperder的name-->
    <!--appender節點和apperder-ref節點應該一一對應-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <root>
      <!--====控制檯控制顯示日誌====-->
     <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>

上面的配置我們主要關注appender節點和root節點。其餘節點節本暫時不用管。

apperder(附着器):type屬性決定日誌輸出的具體位置。

 

AdoNetAppender:針對數據庫輸出(MS SQL Server,MS Access,Oracle9i,Oracle8i,IBM DB2,SQLite)
AspNetTraceAppender:在AspNetTraceAppender記錄消息
BufferingForwardingAppender:緩衝消息,然後輸出到apperder
ColoredConsoleAppender:將消息發送到控制檯,可以設置背景、字體顏色
ConsoleAppender:將消息發送到控制檯
EventLogAppender:將消息發送到應用程序的事件中
FileAppender:將日誌寫入文件中
ForwardingAppender:詳細看官網說明。
ManagedColoredConsoleAppender:可以用來突出顯示錯誤消息
MemoryAppender:內存流附着器
NetSendAppender:詳細看官網說明
OutputDebugStringAppender:將日誌寫入OutputDebugString API
RemotingAppender:將日誌傳遞給remoting
RollingFileAppender:以FileAppender爲基礎,可以設置按時間或大小重新覆蓋日誌。
SmtpAppender:通過smtp電子郵件發送日誌
SmtpPickupDirAppender:類似smtp,詳細可以看官網說明。
TraceAppender:將日誌寫入.net 基類庫提供的跟蹤系統(System.Diagnostics.Trace )
UdpAppender:發送到RemoteAddress 上指定 RemotePort。
DynamicPatternLayout:詳細看官網說明。
apperder類型

 

以上都是我的概括,有些不好概括的,就沒有寫,怕誤導大家。

大家也可以參考官網說明(有具體的配置信息) http://logging.apache.org/log4net/release/config-examples.html

如果有概括的更好的,也希望和我分享:z13qu#sina.com


 

接下來分析下特殊字符:

在apperder的layout下的conversionPattern 中,可以發現有很多你並不太明白的字符

"%date [%thread]"
讓我們來具體看看它們的意思:

%m(message):日誌具體內容(第一篇中寫的  consoleLoger.Info("這是一行日誌");  "這是一行日誌"就是%m的內容)

%n(new line):換行

%d(datetime):輸出當前語句運行的時刻

%r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數

%t(thread id):當前語句所在的線程ID

%p(priority): 日誌的當前優先級別,即DEBUG、INFO、WARN…等

%c(class):當前日誌對象的名稱

 

%L:輸出語句所在的行號

%F:輸出語句所在的文件名

%-數字:表示該項的最小長度,如果不夠,則用空格填充

想在回過頭來看第一篇的配置文件和輸出內容,是否能看明白了呢?

這一篇基本瞭解了大部分的理論和配置。下一篇,開始通過源碼來講解具體的使用過程。我也會將大部分的註釋寫在源碼中。
希望在實踐操作中,感受到最真實的log4net。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章