1. 程式人生 > 實用技巧 >Log4Net 詳解(轉)

Log4Net 詳解(轉)

1.Log4Net環境的搭建與基本配置

(1)Log4Net框架介紹

Log4net 是 Apache 下一個開放原始碼的專案,它是Log4j 的一個克隆版。我們可以控制日誌資訊的輸出目的地。Log4net中定義了多種日誌資訊輸出模式。它可以根據需要將日誌輸出到控制檯,文字檔案,windows 日誌事件檢視器中,包括資料庫,郵件等等位置,以便我們快速跟蹤程式bug。

(2)Log4Net的環境配置以及簡單使用

程式程式碼:
 1 [assembly: log4net.Config.XmlConfigurator(Watch = true)]
 2 namespace APP02
 3 {
4 class Program 5 { 6 static void Main(string[] args) 7 { 8 ILog log = log4net.LogManager.GetLogger("Test"); 9 log.Error("錯誤", new Exception("發生了一個異常"));//錯誤 10 log.Fatal("嚴重錯誤", new Exception("發生了一個致命錯誤"));//嚴重錯誤 11 log.Info("
資訊"); //記錄一般資訊 12 log.Debug("除錯資訊");//記錄除錯資訊 13 log.Warn("警告");//記錄警告資訊 14 Console.WriteLine("日誌記錄完畢。"); 15 Console.Read(); 16 } 17 } 18 }

App.config檔案配置:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> 5 </configSections> 6 <log4net> 7 <appender name="控制檯輸出" type="log4net.Appender.ConsoleAppender"> 8 <layout type="log4net.Layout.PatternLayout"> 9 <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> 10 </layout> 11 </appender> 12 <logger name="Test"> 13 <level value="ALL"/> 14 <appender-ref ref="控制檯輸出" /> 15 </logger> 16 </log4net> 17 </configuration>

執行結果:

2.Log4Net結構

(1)Log4Net核心元件

Log4net主要分為5個核心元件: Logger, Appender, Filter, Layout, Object Render。

(2)Logger介紹

Logger是負責日誌的記錄者,假設我們需要記錄一些正常的執行時日誌和出現異常時的錯誤日誌,那麼我們可以通過在配置檔案當中新增兩個Logger實現。Logger主要用於記錄日誌的分類和控制日誌的級別。它可以以多種格式輸出日誌資訊,同時它也可以控制日誌的輸出級別。 log4net使用繼承體系,也就是說假如存在兩個Logger,名字分別為a.b.c和a.b。那麼a.b就是a.b.c的祖先。每個Logger都繼承了它祖先的屬性。

(3)Appender介紹

Appender提供記錄的介質,我們可能要將日誌輸出到控制檯,文字檔案,windows 日誌事件檢視器中,包括資料庫,郵件等等位置。 我們可以通過Appender配置實現,而且Log4Net當中已經預設提供了一些常用的Appender,我們可以簡單地修改一些配置檔案就實現同時向資料庫和同時向檔案中寫入的功能。

(4)Filter介紹

Filter就是過濾器,使用過濾器可以過濾掉Appender輸出的部分內容,只輸出感興趣的日誌。

(5)Layout介紹

Layout用於控制Appender的輸出格式,可以使線性的也可以使XML。一個Appender只能有一個Layout配置。

(6)Object Render介紹

Object Render將告訴logger如何把一個物件轉化為一個字串記錄到日誌裡。ILog中定義的記錄日誌的方法接收的引數是Object,而不是String。 例如你想把Orange物件記錄到日誌中,但此時logger只會呼叫Orange預設的ToString方法而已。所以要定義一個OrangeRender類實現log4net.ObjectRender.IObjectRender介面,然後註冊它。這時logger就會知道如何把Orange記錄到日誌中了。

3.logger節點配置詳解

(1)logger節點配置

logger節點支援的屬性:name、additivity。 name 必須的,logger的名稱,在程式碼中得到ILog物件時用到。 additivity 可選,取值是true或false,預設值是true。設定為false時將阻止父logger中的appender。 logger支援的子元素:level、appender-ref、param。 level 最多一個。在這個級別或之上的才會被記錄。OFF、FATAL、ERROR、WARN 、INFO、DEBUG、ALL appender-ref 0個或多個,要引用的appender的名字。 param 0個或多個,設定一些引數。

(2)日誌級別等級

高到底分別為:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL

(3)ILog物件說明

ILog是實現Logger的一個介面,ILog定義了5個方法(Debug,Inof,Warn,Error,Fatal)分別對不同的日誌等級記錄日誌。這5個方法都有1個過載,以Debug為例說明一下,其它的和它差不多。 ILog中對Debug方法的定義如下:
voidDebug(objectmessage);
voidDebug(objectmessage,Exceptionexception); 還有一個布林屬性:
boolIsDebugEnabled {get; }
如果使用Debug(object message, Exception exception)則無論Layout如何配置,日誌都會輸出Exception資訊,包括Exception的Message和Trace。如果使用Debug(object message),則無論Layout如何配置是不會輸出Exception資訊的。 在程式碼中可以使用LogManager類來得到Logger配置下的相應的ILog物件,LogManager類用來管理所應得Logger,它的GetLogger靜態方法,可以獲得配置檔案中相應的Logger,程式碼如下: ILoglog =LogManager.GetLogger("logger-name")

(4)logger配置使用示例

使用多個appender同事到控制檯與檔案中輸出日誌
 1 <log4net>
 2   <logger additivity="true" name="Test">
 3     <level value="ALL"/>
 4     <appender-ref ref="控制檯輸出"/>
 5     <appender-ref ref="檔案輸出"/>
 6   </logger>
 7   <appender name="控制檯輸出" type="log4net.Appender.ConsoleAppender">
 8     <layout type="log4net.Layout.PatternLayout">
 9       <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
10     </layout>
11   </appender>
12   <appender name="檔案輸出" type="log4net.Appender.FileAppender">
13     <param name="File" value="F:log-file.txt" />
14     <layout type="log4net.Layout.PatternLayout">
15       <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
16     </layout>
17   </appender>
18 </log4net>


使用logger的繼承機制

 1 <log4net xmlns="urn:log4net">
 2   <logger xmlns="" name="Base">
 3     <appender-ref ref="檔案輸出"/>
 4   </logger>
 5   <logger xmlns="" name="Base.Test"><!-- 繼承Base-->
 6     <level value="ALL"/>
 7     <appender-ref ref="控制檯輸出"/>
 8   </logger>
 9   <appender xmlns=""  name="控制檯輸出" type="log4net.Appender.ConsoleAppender">
10     <layout type="log4net.Layout.PatternLayout">
11       <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
12     </layout>
13   </appender>
14   <appender xmlns=""  name="檔案輸出" type="log4net.Appender.FileAppender">
15     <param name="File" value="F:log-file.txt" />
16     <layout type="log4net.Layout.PatternLayout">
17       <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
18     </layout>
19   </appender>
20 </log4net>

4.appender節點配置詳解

(1)appender節點配置

支援的屬性:name、type(name屬性必須唯一,type屬性必須指定)。 name 必須的,appender物件的名稱 type 必須的,appender物件的輸出型別 常用的子元素:appender-ref、filter、layout、param appender-ref 0個或多個,允許此appender引用其他appender,並不是所以appender型別都支援。 filter 0個或多個,定義此appender使用的過濾器。 layout 最多一個。定義appender使用的輸出格式。 param 0個或多個, 設定Appender類中對應的屬性的值。

(2)appender的輸出方式(type屬性)

AdoNetAppender 將日誌記錄到資料庫中。可以採用SQL和儲存過程兩種方式。 AnsiColorTerminalAppender 將日誌高亮輸出到ANSI終端。 AspNetTraceAppender 能用asp.net中Trace的方式檢視記錄的日誌。 BufferingForwardingAppender 在輸出到子Appenders之前先快取日誌事件。 ConsoleAppender 將日誌輸出到應用程式控制臺。 EventLogAppender 將日誌寫到Windows Event Log。 FileAppender 將日誌輸出到檔案。 ForwardingAppender 傳送日誌事件到子Appenders。 LocalSyslogAppender 將日誌寫到local syslog service (僅用於UNIX環境下)。 MemoryAppender 將日誌存到記憶體緩衝區。 NetSendAppender 將日誌輸出到Windows Messenger service.這些日誌資訊將在使用者終端的對話方塊中顯示。 OutputDebugStringAppender 將日誌輸出到Debuger,如果程式沒有Debuger,就輸出到系統Debuger。如果系統Debuger也不可用,將忽略訊息。 RemoteSyslogAppender 通過UDP網路協議將日誌寫到Remote syslog service。 RemotingAppender 通過.NET Remoting將日誌寫到遠端接收端。 RollingFileAppender 將日誌以回滾檔案的形式寫到檔案中。 SmtpAppender 將日誌寫到郵件中。 SmtpPickupDirAppender 將訊息以檔案的方式放入一個目錄中,像IIS SMTP agent這樣的SMTP代理就可以閱讀或傳送它們。 TelnetAppender 客戶端通過Telnet來接受日誌事件。 TraceAppender 將日誌寫到.NET trace 系統。 UdpAppender 將日誌以無連線UDP資料報的形式送到遠端宿主或用UdpClient的形式廣播。

(3)appender配置使用示例

以回滾檔案的形式記錄日誌
 1 <appender name="檔案輸出" type="log4net.Appender.RollingFileAppender">
 2       <file value="F:\log\Log.txt" />
 3       <appendToFile value="true" />
 4       <rollingStyle value="Size" />
 5       <maxSizeRollBackups value="10" />
 6       <maximumFileSize value="5MB" />
 7       <staticLogFileName value="true" />
 8       <layout type="log4net.Layout.PatternLayout">
 9         <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
10       </layout>
11 </appender>

使用過濾器記錄日誌

1 <appender name="控制檯輸出" type="log4net.Appender.ConsoleAppender">
2   <layout type="log4net.Layout.PatternLayout">
3     <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
4   </layout>
5   <filter type="log4net.Filter.LevelMatchFilter">
6     <levelToMatch value="FATAL"/>
7   </filter>
8   <filter type="log4net.Filter.DenyAllFilter" />
9 </appender>

5.filter節點配置詳解

(1)filter節點配置

filter只能作為<appender>的子元素,type屬性表示Filter的型別。常用子元素<param>數量0個或多個,作用設定一些引數。

(2)filter的型別說明

DenyAllFilter 阻止所有的日誌事件被記錄 LevelMatchFilter 只有指定等級的日誌事件才被記錄 LevelRangeFilter 日誌等級在指定範圍內的事件才被記錄 LoggerMatchFilter Logger名稱匹配,才記錄 PropertyFilter 訊息匹配指定的屬性值時才被記錄 StringMathFilter 訊息匹配指定的字串才被記錄 MdcFilter NdcFilter

(3)filter的工作原理

如果想使用LevelMatchFilter過濾器過濾日誌資訊,我們使用如下的配置:
1 <appender xmlns=""  name="測試輸出" type="log4net.Appender.ConsoleAppender">
2   <layout type="log4net.Layout.PatternLayout">
3     <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
4   </layout>
5   <filter type="log4net.Filter.LevelMatchFilter">
6     <levelToMatch value="FATAL"/><!--只記錄等級為“FATAL”的日誌資訊-->
7   </filter>
8 </appender>

在控制檯輸出的日誌資訊如下:

此時,我們會覺得很奇怪,為什麼所有等級的日誌資訊都輸出了呢?我們再修改一下配置:

1 <appender xmlns=""  name="測試輸出" type="log4net.Appender.ConsoleAppender">
2   <layout type="log4net.Layout.PatternLayout">
3     <param name="ConversionPattern" value="%d %-5p %m %exception %n"  />
4   </layout>
5   <filter type="log4net.Filter.LevelMatchFilter">
6     <levelToMatch value="FATAL"/><!--只記錄等級為“FATAL”的日誌資訊-->
7   </filter>
8   <filter type="log4net.Filter.DenyAllFilter"/><!--在最後增加這個過濾器-->
9 </appender>
現在,在控制檯輸出的日誌資訊如下: 現在,就得到了我們想要的輸出日誌。其實filter的工作原理是這樣的:日誌在被過濾器處理時,如果日誌資訊滿足當前過濾器的過濾條件時,該日誌資訊就會被輸出記錄,否則日誌資訊將被傳遞給下一個過濾器做同樣的處理,如果下一個過濾器不存在也會輸出日誌資訊。

(4)filter的使用示例

記錄日誌等級為“FATAL”和“ERROR”的日誌資訊:
1 <filter type="log4net.Filter.LevelMatchFilter">
2   <levelToMatch value="FATAL"/>
3 </filter>
4 <filter type="log4net.Filter.LevelMatchFilter">
5   <levelToMatch value="ERROR"/>
6 </filter>
7 <filter type="log4net.Filter.DenyAllFilter"/>

記錄日誌等級範圍從“ERROR”到“INFO”的日誌資訊:

1 <filter type="log4net.Filter.LevelRangeFilter">
2   <levelMax value="ERROR"/>
3   <levelMin value="INFO"/>
4 </filter>
5 <filter type="log4net.Filter.DenyAllFilter"/><!--不加這個過濾器也可以-->

6.Layout節點配置詳解

(1)layout節點配置

layout節點只能作為<appender>的子元素。type屬性表示Layout的型別。常用子元素<param>數量0個或多個,作用設定一些引數。 Layout用於控制Appender的輸出格式,可以使線性的也可以使XML。最常用的Layout應該是使用者自定義格式的PatternLayout,其次是SimpleLayout和ExceptionLayout。然後還有4個Layout,其中有兩個是輸出Xml的Layout,但是中文會有問題。ExceptionLayout需要給Logger的方法傳入Exception物件作為引數才起作用,否則就什麼也不輸出。輸出的時候會包含Message和Trace。

(2)layout節點的type屬性取值

ExceptionLayout 只呈現日誌事件中異常的文字資訊 PatternLayout 可以通過型別字串來配置的佈局 RawPropertyLayout 從日誌事件中提取屬性值 RawTimeStampLayout 從日誌事件中提取日期 RawUtcTimeStampLayout 從日誌事件中提取UTC日期 SimpleLayout 很簡單的佈局 XmlLayout 把日誌事件格式化為XML元素的佈局

(3)PatterLayout的格式化字串

%m、%message 輸出的日誌訊息 %d、%datetime 輸出當前語句執行的時刻,格式%date{yyyy-MM-dd HH:mm:ss,fff} %r、%timestamp 輸出程式從執行到執行到當前語句時消耗的毫秒數 %p、%level 日誌的當前優先級別 %c、%logger 當前日誌物件的名稱 %L、%line 輸出語句所在的行號 %F、%file 輸出語句所在的檔名,警告:只在除錯的時候有效,呼叫本地資訊會影響效能 %a、%appdomain 引發日誌事件的應用程式域的名稱。 %C、%class、%type 引發日誌請求的類的全名,警告:會影響效能 %exception 異常資訊 %u、%identity 當前活動使用者的名字,我測試的時候%identity返回都是空的。警告:會影響效能 %l、%location 引發日誌事件的名空間、類名、方法、行號。警告:會影響效能,依賴pdb檔案 %M、%method 發生日誌請求的方法名,警告:會影響效能 %n、%newline 換行符 %x、%ndc NDC(nested diagnostic context) %X、%mdc、%P、%properties 等介於 %property %property 輸出{log4net:Identity=, log4net:UserName=, log4net:HostName=} %t、%thread 引發日誌事件的執行緒,如果沒有執行緒名就使用執行緒號。 %w、%username 當前使用者的WindowsIdentity,類似:HostName/Username。警告:會影響效能 %utcdate 發生日誌事件的UTC時間。例如:%utcdate{HH:mm:ss,fff} %% 輸出一個百分號

(4)PatterLayout格式修飾符

格式修飾符 對齊 最小寬 最大寬 說明 %20logger 右對齊 20 無 如果logger名不足20個字元,就在左邊補空格 %-20logger 左對齊 20 無 如果logger名不足20個字元,就在右邊補空格 %.30logger 左對齊 無 30 超過30個字元將截斷 %20.30logger 右對齊 20 30 logger名要在20到30之間,少了在左邊補空格,多了截斷 %-20.30logger 左對齊 20 30 logger名要在20到30之間,少了在右邊補空格,多了截斷

(5)layout的使用示例

1 <layout type="log4net.Layout.PatternLayout">
2   <conversionPattern value="%d [%t] %-5p %c [%x]  - %m%n"/>
3 </layout>

7.其它節點的說明與配置

(1)param節點

<param>元素可以是如何元素的子元素,包含的屬性:name、value、type。name:必須的,取值是父物件的引數名。value:可選的,value是一個能被轉化為引數值的字串。type:可選的,value和type中,必須有一個屬性被指定。type是一個型別名,如果type不是在log4net程式集中定義的,就需要使用全名。 param節點的主要作用是可以代替其他任何節點,例如:
1 <layout type="log4net.Layout.PatternLayout">
2   <conversionPattern value="%5p %n"/>
3   <!--可以使用:<param name="ConversionPattern" value="%5p %n"/>-->
4 </layout>
5 <filter type="log4net.Filter.LevelMatchFilter">
6   <levelToMatch value="FATAL"/>
7   <!--可以使用:<param name="LevelToMatch" value="FATAL"/>-->
8 </filter>
9 <filter type="log4net.Filter.DenyAllFilter" />

(2)root節點

root節點的作用是所有其它logger都預設繼承它。root元素沒有屬性。root節點的子元素與logger一樣有appender-ref、level、param。 使用示例:
1 <root xmlns="">
2   <level value="WARN" />
3   <appender-ref ref="LogFileAppender" />
4   <appender-ref ref="ConsoleAppender" />
5 </root>

(3)log4net節點

Log4net節點是整個日誌配置的根節點,包含的屬性:debug、update、threshold。debug:可選,取值是true或false,預設是false。設定為true,開啟log4net的內部除錯。update:可選,取值是Merge(合併)或Overwrite(覆蓋),預設值是Merge。設定為Overwrite,在提交配置的時候會重置已經配置過的庫。threshold:可選,取值是repository(庫)中註冊的level,預設值是ALL。 Log4net節點支援的子元素:appender(0或多個)、logger (0或多個)、renderer (0或多個)、root(最多一個)、param(0或多個)。

(4)configSections節點

配置log4net需要在configSections節點中加入節點section,例如:
1 <configSections>
2   <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
3 </configSections>

8.配置檔案

(1)配置檔案結構圖

(2)配置檔案示例

 1 <log4net xmlns="urn:log4net">
 2   <root xmlns="">
 3     <level value="FATAL"/>
 4     <appender-ref ref="控制檯輸出"/>
 5   </root>
 6   <logger xmlns="" name="Test">
 7     <level value="ALL"/>
 8     <appender-ref ref="控制檯輸出"/>
 9   </logger>
10   <logger xmlns="" name="Test.lzw" additivity="false">
11     <level value="WARN"/>
12     <appender-ref ref="檔案輸出"/>
13   </logger>
14   <appender xmlns=""  name="控制檯輸出" type="log4net.Appender.ConsoleAppender">
15     <layout type="log4net.Layout.PatternLayout">
16       <conversionPattern value="%5p %n"/>
17     </layout>
18     <filter type="log4net.Filter.LevelMatchFilter">
19       <levelToMatch value="FATAL"/>
20     </filter>
21     <filter type="log4net.Filter.DenyAllFilter" />
22   </appender>
23   <appender xmlns=""  name="檔案輸出" type="log4net.Appender.FileAppender">
24     <file value="F:\ServerLog.txt" />
25     <appendToFile value="false"/>
26     <layout type="log4net.Layout.PatternLayout">
27       <param name="ConversionPattern" value="%property %n"  />
28     </layout>
29   </appender>
30 </log4net>

(3)關聯配置檔案

log4net預設關聯的是應用程式的配置檔案App.config或Web.config,可以使用程式集自定義屬性來進行設定。下面來介紹一下這個自定義屬性:log4net.Config.XmlConifguratorAttribute。 XmlConfiguratorAttribute有3個屬性:ConfigFile、ConfigFileExtension、Watch。 ConfigFile:配置檔案的名字,檔案路徑相對於應用程式目錄。ConfigFileExtension:配置檔案的副檔名,檔案路徑相對於應用程式的目錄,不能和ConfigFile屬性一起使用。Watch:如果將Watch屬性設定為true,就會監視配置檔案,當配置檔案發生變化的時候,就會重新載入。例如: //監視預設的配置檔案,App.exe.config [assembly: log4net.Config.XmlConfigurator(Watch =true)]
//配置檔案:App.exe.log4net
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension ="log4net")]
//配置檔案:log4net.config
[assembly: log4net.Config.XmlConfigurator(ConfigFile ="log4net.config")] 也可以在Global.asaxApplication_Start裡或者是Program.cs中的Main方法中新增,注意這裡一定是絕對路徑,如下所示:
log4net.Config.XmlConfigurator.Configure(newFileInfo(@"F:/log4net.config"));

(4)Log4j的配置檔案例子

  1 <?xml version="1.0" encoding="UTF-8" ?>  
  2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  4     <!-- 
  5         根節點的配置順序:
  6             renderer
  7             appender
  8             plugin
  9             logger
 10             category
 11             root
 12             loggerfactory
 13             categoryfactory
 14     -->
 15     <!-- ========================================================================================= -->
 16     <!-- 
 17         org.apache.log4j.ConsoleAppender            控制檯輸出
 18         org.apache.log4j.FileAppender               檔案日誌輸出
 19         org.apache.log4j.DailyRollingFileAppender   每個時間段產生一個日誌檔案
 20         org.apache.log4j.RollingFileAppender        檔案大小到達指定尺寸的時候產生一個新的檔案
 21         org.apache.log4j.WriterAppender             將日誌資訊以流格式傳送到任意指定的地方
 22         org.apache.log4j.net.SMTPAppender           發郵件輸出日誌
 23         org.apache.log4j.net.SocketAppender         Socket日誌
 24         org.apache.log4j.nt.NTEventLogAppender      Window NT日誌
 25         org.apache.log4j.net.SyslogAppender
 26         org.apache.log4j.net.JMSAppender
 27         org.apache.log4j.AsyncAppender
 28         org.apache.log4j.varia.NullAppender
 29         org.apache.log4j.jdbc.JDBCAppender 
 30     -->
 31     <!-- ========================================================================================= -->
 32     <!-- 
 33         控制檯輸出:org.apache.log4j.ConsoleAppender
 34             Threshold=WARN          指定日誌訊息的輸出最低層次。 
 35             ImmediateFlush=true     預設值是 true,意謂著所有的訊息都會被立即輸出。 
 36             Target=System.err       預設情況下是:System.out,指定輸出控制檯  
 37     -->
 38     <appender name="Console" class="org.apache.log4j.ConsoleAppender">
 39         <param name="Threshold" value="ALL"></param>
 40         <param name="ImmediateFlush" value="true"></param>
 41         <param name="Target" value="System.out"></param>
 42         <layout class="org.apache.log4j.TTCCLayout" />
 43     </appender>
 44     <!-- ========================================================================================= -->
 45     <!--     
 46         檔案日誌輸出:org.apache.log4j.FileAppender
 47             Threshold=WARN          指定日誌訊息的輸出最低層次。 
 48             ImmediateFlush=true     預設值是 true,意謂著所有的訊息都會被立即輸出。 
 49             File=mylog.txt          指定訊息輸出到 mylog.txt 檔案。 
 50             Append=false            預設值是 true,即將訊息增加到指定檔案中,false 指將訊息覆蓋指定的檔案內容。 
 51     -->
 52     <appender name="File" class="org.apache.log4j.FileAppender">
 53         <param name="Threshold" value="ALL"></param>
 54         <param name="ImmediateFlush" value="true"></param>
 55         <param name="File" value="F:\\FileAppender.txt"></param>
 56         <param name="Append" value="false"></param>
 57         <layout class="org.apache.log4j.TTCCLayout" />
 58     </appender>
 59     <!-- ========================================================================================= -->
 60     <!--     
 61         每個時間段產生一個日誌檔案:org.apache.log4j.DailyRollingFileAppender
 62         Threshold=WARN          指定日誌訊息的輸出最低層次。 
 63         ImmediateFlush=true     預設值是 true,意謂著所有的訊息都會被立即輸出。 
 64         File=mylog.txt          指定訊息輸出到 mylog.txt 檔案。 
 65         Append=false            預設值是 true,即將訊息增加到指定檔案中,false 指將訊息覆蓋指定的檔案內容。 
 66         DatePattern=.yyyy-ww    每週滾動一次檔案,即每週產生一個新的檔案。
 67         當然也可以指定按月、周、天、時和分。即對應的格式如下: 
 68             .yyyy-MM            每月 
 69             .yyyy-ww            每週 
 70             .yyyy-MM-dd         每天 
 71             .yyyy-MM-dd-a       每天兩次 
 72             .yyyy-MM-dd-HH      每小時 
 73             .yyyy-MM-dd-HH-mm   每分鐘  
 74     -->
 75     <appender name="DailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
 76         <param name="Threshold" value="ALL"></param>
 77         <param name="ImmediateFlush" value="true"></param>
 78         <param name="File" value="F:\\DailyRollingFileAppender.txt"></param>
 79         <param name="Append" value="false"></param>
 80         <param name="DatePattern" value=".yyyy-MM-dd-HH-mm"></param>
 81         <layout class="org.apache.log4j.TTCCLayout" />
 82     </appender>
 83     <!-- ========================================================================================= -->
 84     <!--     
 85         檔案大小到達指定尺寸的時候產生一個新的檔案:org.apache.log4j.RollingFileAppender
 86         Threshold=WARN          指定日誌訊息的輸出最低層次。 
 87         ImmediateFlush=true     預設值是 true,意謂著所有的訊息都會被立即輸出。 
 88         File=mylog.txt          指定訊息輸出到 mylog.txt 檔案。 
 89         Append=false            預設值是 true,即將訊息增加到指定檔案中,false 指將訊息覆蓋指定的檔案內容。 
 90         MaxFileSize=100KB       字尾可以是 KB, MB  或者是  GB.  在日誌檔案到達該大小時,將會自動滾動,即將原來的內容移到 mylog.log.1 檔案。 
 91         MaxBackupIndex=2        指定可以產生的滾動檔案的最大數。 
 92     -->
 93     <appender name="RollingFile" class="org.apache.log4j.RollingFileAppender">
 94         <param name="Threshold" value="ALL"></param>
 95         <param name="ImmediateFlush" value="true"></param>
 96         <param name="File" value="F:\\RollingFileAppender.txt"></param>
 97         <param name="Append" value="false"></param>
 98         <param name="MaxFileSize" value="1KB"></param>
 99         <param name="MaxBackupIndex" value="3"></param>
100         <layout class="org.apache.log4j.TTCCLayout" />
101     </appender>
102     <!-- ========================================================================================= -->
103     <!-- ========================================================================================= -->
104     <!-- 
105         org.apache.log4j.HTMLLayout             以HTML表格形式佈局
106         org.apache.log4j.PatternLayout          可以靈活地指定佈局模式
107         org.apache.log4j.xml.XMLLayout          XML檔案佈局日誌
108         org.apache.log4j.SimpleLayout           包含日誌資訊的級別和資訊字串
109         org.apache.log4j.TTCCLayout             包含日誌產生的時間、執行緒、類別等等資訊 
110     -->
111     <!-- ========================================================================================= -->
112     <!--     
113         以HTML表格形式佈局:org.apache.log4j.HTMLLayout
114             LocationInfo=true       預設值是false,輸出java檔名稱和行號
115             Title=日誌資訊          預設值是"Log4J Log Messages" 
116     -->
117     <appender name="HTML" class="org.apache.log4j.ConsoleAppender">
118         <layout class="org.apache.log4j.HTMLLayout">
119             <param name="LocationInfo" value="true"></param>
120             <param name="Title" value="日誌資訊"></param>
121         </layout>
122     </appender>
123     <!-- ========================================================================================= -->
124     <!-- 
125         可以靈活地指定佈局模式:org.apache.log4j.PatternLayout
126             ConversionPattern=%m%n  指定怎樣格式化指定的訊息,如:%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
127     -->
128     <appender name="Pattern" class="org.apache.log4j.ConsoleAppender">
129         <layout class="org.apache.log4j.PatternLayout">
130             <param name="ConversionPattern" value="級別:[%-6p] 時間:[%d{yyy-MMM-dd HH:mm:ss,SSS}] %-50l %m%n"></param>
131         </layout>
132     </appender>
133     <!-- ========================================================================================= -->
134     <!-- 
135         XML檔案佈局日誌:org.apache.log4j.xml.XMLLayout
136             LocationInfo=true        預設值是 false,輸出 java 檔案和行號 
137     -->
138     <appender name="XML" class="org.apache.log4j.ConsoleAppender">
139         <layout class="org.apache.log4j.xml.XMLLayout">
140             <param name="LocationInfo" value="true"></param>
141         </layout>
142     </appender>
143     <!-- ========================================================================================= -->
144     <!-- ========================================================================================= -->
145     <logger name="ConsoleLog" additivity="false">
146         <level value="WARN" />
147         <appender-ref ref="Console" />
148     </logger>
149     <logger name="FileLog" additivity="false">
150         <level value="WARN" />
151         <appender-ref ref="File" />
152     </logger>
153     <logger name="DailyRollingFileLog" additivity="false">
154         <level value="WARN" />
155         <appender-ref ref="DailyRollingFile" />
156     </logger>
157     <logger name="RollingFileLog" additivity="false">
158         <level value="WARN" />
159         <appender-ref ref="RollingFile" />
160     </logger>
161     <logger name="HTMLLog" additivity="false">
162         <level value="WARN" />
163         <appender-ref ref="HTML" />
164     </logger>
165     <logger name="PatternLog" additivity="false">
166         <level value="WARN" />
167         <appender-ref ref="Pattern" />
168     </logger>
169     <logger name="XMLLog" additivity="false">
170         <level value="WARN" />
171         <appender-ref ref="XML" />
172     </logger>
173     <!-- ========================================================================================= -->
174     <!-- 
175         優先順序:ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF 
176     -->
177     <root>
178         <priority value="ALL" />
179         <appender-ref ref="Console" />
180     </root>
181 </log4j:configuration> 

原文地址:https://www.cnblogs.com/LiZhiW/p/4317198.html#_label3