1.Log4Net環境的搭建與基本配置
(1)Log4Net框架介紹
Log4net 是 Apache 下一個開放源碼的項目,它是Log4j 的一個克隆版。我們可以控制日志信息的輸出目的地。Log4net中定義了多種日志信息輸出模式。它可以根據需要將日志輸出到控制台,文本文件,windows 日志事件查看器中,包括數據庫,郵件等等位置,以便我們快速跟蹤程序bug。
(2)Log4Net的環境配置以及簡單使用
程序代碼:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace APP02
{
class Program
{
static void Main(string[] args)
{
ILog log = log4net.LogManager.GetLogger("Test");
log.Error("錯誤", new Exception("發生了一個異常"));//錯誤
log.Fatal("嚴重錯誤", new Exception("發生了一個致命錯誤"));//嚴重錯誤
log.Info("信息"); //記錄一般信息
log.Debug("調試信息");//記錄調試信息
log.Warn("警告");//記錄警告信息
Console.WriteLine("日志記錄完畢。");
Console.Read();
}
}
}
App.config文件配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="控制台輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<logger name="Test">
<level value="ALL"/>
<appender-ref ref="控制台輸出" />
</logger>
</log4net>
</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方法的定義如下:
void Debug(object message);
bool IsDebugEnabled { get; }
如果使用Debug(object message, Exception exception)則無論Layout如何配置,日志都會輸出Exception信息,包括Exception的Message和Trace。如果使用Debug(object message),則無論Layout如何配置是不會輸出Exception信息的。
在代碼中可以使用LogManager類來得到Logger配置下的相應的ILog對象,LogManager類用來管理所應得Logger,它的GetLogger靜態方法,可以獲得配置文件中相應的Logger,代碼如下:
ILog log = LogManager.GetLogger("logger-name")
(4)logger配置使用示例
使用多個appender同事到控制台與文件中輸出日志
<log4net>
<logger additivity="true" name="Test">
<level value="ALL"/>
<appender-ref ref="控制台輸出"/>
<appender-ref ref="文件輸出"/>
</logger>
<appender name="控制台輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
</appender>
<appender name="文件輸出" type="log4net.Appender.FileAppender">
<param name="File" value="F:log-file.txt" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
</appender>
</log4net>
使用logger的繼承機制
<log4net xmlns="urn:log4net">
<logger xmlns="" name="Base">
<appender-ref ref="文件輸出"/>
</logger>
<logger xmlns="" name="Base.Test"><!-- 繼承Base-->
<level value="ALL"/>
<appender-ref ref="控制台輸出"/>
</logger>
<appender xmlns="" name="控制台輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
</appender>
<appender xmlns="" name="文件輸出" type="log4net.Appender.FileAppender">
<param name="File" value="F:log-file.txt" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
</appender>
</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配置使用示例
以回滾文件的形式記錄日志
<appender name="文件輸出" type="log4net.Appender.RollingFileAppender">
<file value="F:\log\Log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
</appender>
使用過濾器記錄日志
<appender name="控制台輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</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過濾器過濾日志信息,我們使用如下的配置:
<appender xmlns="" name="測試輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/><!--只記錄等級為“FATAL”的日志信息-->
</filter>
</appender>
在控制台輸出的日志信息如下:

此時,我們會覺得很奇怪,為什么所有等級的日志信息都輸出了呢?我們再修改一下配置:
<appender xmlns="" name="測試輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m %exception %n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/><!--只記錄等級為“FATAL”的日志信息-->
</filter>
<filter type="log4net.Filter.DenyAllFilter"/><!--在最后增加這個過濾器-->
</appender>
現在,在控制台輸出的日志信息如下:

現在,就得到了我們想要的輸出日志。其實filter的工作原理是這樣的:日志在被過濾器處理時,如果日志信息滿足當前過濾器的過濾條件時,該日志信息就會被輸出記錄,否則日志信息將被傳遞給下一個過濾器做同樣的處理,如果下一個過濾器不存在也會輸出日志信息。
(4)filter的使用示例
記錄日志等級為“FATAL”和“ERROR”的日志信息:
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/>
</filter>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
記錄日志等級范圍從“ERROR”到“INFO”的日志信息:
<filter type="log4net.Filter.LevelRangeFilter">
<levelMax value="ERROR"/>
<levelMin value="INFO"/>
</filter>
<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的使用示例
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
7.其它節點的說明與配置
(1)param節點
<param>元素可以是如何元素的子元素,包含的屬性:name、value、type。name:必須的,取值是父對象的參數名。value:可選的,value是一個能被轉化為參數值的字符串。type:可選的,value和type中,必須有一個屬性被指定。type是一個類型名,如果type不是在log4net程序集中定義的,就需要使用全名。
param節點的主要作用是可以代替其他任何節點,例如:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5p %n"/>
<!--可以使用:<param name="ConversionPattern" value="%5p %n"/>-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/>
<!--可以使用:<param name="LevelToMatch" value="FATAL"/>-->
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
(2)root節點
root節點的作用是所有其它logger都默認繼承它。root元素沒有屬性。root節點的子元素與logger一樣有appender-ref、level、param。
使用示例:
<root xmlns="">
<level value="WARN" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</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,例如:
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
8.配置文件
(1)配置文件結構圖

(2)配置文件示例
<log4net xmlns="urn:log4net">
<root xmlns="">
<level value="FATAL"/>
<appender-ref ref="控制台輸出"/>
</root>
<logger xmlns="" name="Test">
<level value="ALL"/>
<appender-ref ref="控制台輸出"/>
</logger>
<logger xmlns="" name="Test.lzw" additivity="false">
<level value="WARN"/>
<appender-ref ref="文件輸出"/>
</logger>
<appender xmlns="" name="控制台輸出" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5p %n"/>
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="FATAL"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender xmlns="" name="文件輸出" type="log4net.Appender.FileAppender">
<file value="F:\ServerLog.txt" />
<appendToFile value="false"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%property %n" />
</layout>
</appender>
</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
)]
[
assembly
: log4net.Config.
XmlConfigurator
(ConfigFileExtension =
"log4net"
)]
[
assembly
: log4net.Config.
XmlConfigurator
(ConfigFile =
"log4net.config"
)]
也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意這里一定是絕對路徑,如下所示:
log4net.Config. XmlConfigurator .Configure( new FileInfo ( @"F:/log4net.config" ));
log4net.Config. XmlConfigurator .Configure( new FileInfo ( @"F:/log4net.config" ));
(4)Log4j的配置文件例子
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--
根節點的配置順序:
renderer
appender
plugin
logger
category
root
loggerfactory
categoryfactory
-->
<!-- ========================================================================================= -->
<!--
org.apache.log4j.ConsoleAppender 控制台輸出
org.apache.log4j.FileAppender 文件日志輸出
org.apache.log4j.DailyRollingFileAppender 每個時間段產生一個日志文件
org.apache.log4j.RollingFileAppender 文件大小到達指定尺寸的時候產生一個新的文件
org.apache.log4j.WriterAppender 將日志信息以流格式發送到任意指定的地方
org.apache.log4j.net.SMTPAppender 發郵件輸出日志
org.apache.log4j.net.SocketAppender Socket日志
org.apache.log4j.nt.NTEventLogAppender Window NT日志
org.apache.log4j.net.SyslogAppender
org.apache.log4j.net.JMSAppender
org.apache.log4j.AsyncAppender
org.apache.log4j.varia.NullAppender
org.apache.log4j.jdbc.JDBCAppender
-->
<!-- ========================================================================================= -->
<!--
控制台輸出:org.apache.log4j.ConsoleAppender
Threshold=WARN 指定日志消息的輸出最低層次。
ImmediateFlush=true 默認值是 true,意謂着所有的消息都會被立即輸出。
Target=System.err 默認情況下是:System.out,指定輸出控制台
-->
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="ALL"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="Target" value="System.out"></param>
<layout class="org.apache.log4j.TTCCLayout" />
</appender>
<!-- ========================================================================================= -->
<!--
文件日志輸出:org.apache.log4j.FileAppender
Threshold=WARN 指定日志消息的輸出最低層次。
ImmediateFlush=true 默認值是 true,意謂着所有的消息都會被立即輸出。
File=mylog.txt 指定消息輸出到 mylog.txt 文件。
Append=false 默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。
-->
<appender name="File" class="org.apache.log4j.FileAppender">
<param name="Threshold" value="ALL"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="File" value="F:\\FileAppender.txt"></param>
<param name="Append" value="false"></param>
<layout class="org.apache.log4j.TTCCLayout" />
</appender>
<!-- ========================================================================================= -->
<!--
每個時間段產生一個日志文件:org.apache.log4j.DailyRollingFileAppender
Threshold=WARN 指定日志消息的輸出最低層次。
ImmediateFlush=true 默認值是 true,意謂着所有的消息都會被立即輸出。
File=mylog.txt 指定消息輸出到 mylog.txt 文件。
Append=false 默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。
DatePattern=.yyyy-ww 每周滾動一次文件,即每周產生一個新的文件。
當然也可以指定按月、周、天、時和分。即對應的格式如下:
.yyyy-MM 每月
.yyyy-ww 每周
.yyyy-MM-dd 每天
.yyyy-MM-dd-a 每天兩次
.yyyy-MM-dd-HH 每小時
.yyyy-MM-dd-HH-mm 每分鍾
-->
<appender name="DailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ALL"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="File" value="F:\\DailyRollingFileAppender.txt"></param>
<param name="Append" value="false"></param>
<param name="DatePattern" value=".yyyy-MM-dd-HH-mm"></param>
<layout class="org.apache.log4j.TTCCLayout" />
</appender>
<!-- ========================================================================================= -->
<!--
文件大小到達指定尺寸的時候產生一個新的文件:org.apache.log4j.RollingFileAppender
Threshold=WARN 指定日志消息的輸出最低層次。
ImmediateFlush=true 默認值是 true,意謂着所有的消息都會被立即輸出。
File=mylog.txt 指定消息輸出到 mylog.txt 文件。
Append=false 默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。
MaxFileSize=100KB 后綴可以是 KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到 mylog.log.1 文件。
MaxBackupIndex=2 指定可以產生的滾動文件的最大數。
-->
<appender name="RollingFile" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ALL"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="File" value="F:\\RollingFileAppender.txt"></param>
<param name="Append" value="false"></param>
<param name="MaxFileSize" value="1KB"></param>
<param name="MaxBackupIndex" value="3"></param>
<layout class="org.apache.log4j.TTCCLayout" />
</appender>
<!-- ========================================================================================= -->
<!-- ========================================================================================= -->
<!--
org.apache.log4j.HTMLLayout 以HTML表格形式布局
org.apache.log4j.PatternLayout 可以靈活地指定布局模式
org.apache.log4j.xml.XMLLayout XML文件布局日志
org.apache.log4j.SimpleLayout 包含日志信息的級別和信息字符串
org.apache.log4j.TTCCLayout 包含日志產生的時間、線程、類別等等信息
-->
<!-- ========================================================================================= -->
<!--
以HTML表格形式布局:org.apache.log4j.HTMLLayout
LocationInfo=true 默認值是false,輸出java文件名稱和行號
Title=日志信息 默認值是"Log4J Log Messages"
-->
<appender name="HTML" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.HTMLLayout">
<param name="LocationInfo" value="true"></param>
<param name="Title" value="日志信息"></param>
</layout>
</appender>
<!-- ========================================================================================= -->
<!--
可以靈活地指定布局模式:org.apache.log4j.PatternLayout
ConversionPattern=%m%n 指定怎樣格式化指定的消息,如:%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
-->
<appender name="Pattern" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="級別:[%-6p] 時間:[%d{yyy-MMM-dd HH:mm:ss,SSS}] %-50l %m%n"></param>
</layout>
</appender>
<!-- ========================================================================================= -->
<!--
XML文件布局日志:org.apache.log4j.xml.XMLLayout
LocationInfo=true 默認值是 false,輸出 java 文件和行號
-->
<appender name="XML" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.xml.XMLLayout">
<param name="LocationInfo" value="true"></param>
</layout>
</appender>
<!-- ========================================================================================= -->
<!-- ========================================================================================= -->
<logger name="ConsoleLog" additivity="false">
<level value="WARN" />
<appender-ref ref="Console" />
</logger>
<logger name="FileLog" additivity="false">
<level value="WARN" />
<appender-ref ref="File" />
</logger>
<logger name="DailyRollingFileLog" additivity="false">
<level value="WARN" />
<appender-ref ref="DailyRollingFile" />
</logger>
<logger name="RollingFileLog" additivity="false">
<level value="WARN" />
<appender-ref ref="RollingFile" />
</logger>
<logger name="HTMLLog" additivity="false">
<level value="WARN" />
<appender-ref ref="HTML" />
</logger>
<logger name="PatternLog" additivity="false">
<level value="WARN" />
<appender-ref ref="Pattern" />
</logger>
<logger name="XMLLog" additivity="false">
<level value="WARN" />
<appender-ref ref="XML" />
</logger>
<!-- ========================================================================================= -->
<!--
優先級:ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF
-->
<root>
<priority value="ALL" />
<appender-ref ref="Console" />
</root>
</log4j:configuration>
-------------------------------------------------------------------------------------------------------------------------------