目標:
通過使用Log4net框架,創建按日期分類輸出日誌在文本文件的示例程序。
需求:
1 使用log4net框架提供的日誌功能,進行系統的日誌管理。
2 每一天的日誌用一個對應的日誌文本去存儲。(日誌文本名稱按日期進行區別)
需求分析:
1 整備log4net.dll組件庫
2 由於使用的是回滾文件記錄日誌的方式,所以Appender選擇:RollingFileAppender.
回滾形式:日期。
日期格式初步定爲:yyyyMMdd-HHmmm
具體實施:
(1)創建一個控制檯c#應用程序
(2)添加log4net.dll引用
(3)在項目中添加一個文本文件,文件擴展名改爲:log.set,注意:要將此文件的屬性設置爲:如有較新的則複製
文件的內容爲:
<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
<root xmlns="">
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<appender xmlns="" name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\Log_"/>
<param name="AppendToFile" value="true"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> <!--關於這裏參數設置-->
</layout>
</appender>
</log4net>
(4)在項目的AssembleInfo.cs文件中添加:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.set", Watch = true)]
(5)編碼
a. 在你的Program文件中添加:using:log4net
b.在你的Main函數中拷貝下列代碼
ILog log = log4net.LogManager.GetLogger(typeof(Program));
Random random = new Random();
for (int i = 0; i < 2; i++)
{
//記錄錯誤日誌
if (log.IsErrorEnabled)
log.Debug("你引起了一個錯誤,錯誤ID爲:"+random.Next().ToString());
//記錄嚴重錯誤
if(log.IsFatalEnabled)
log.Fatal("你引發了一個總結者錯誤,可能導致系統終止,ID爲:"+random.Next().ToString());
//記錄一般信息
if (log.IsInfoEnabled)
log.Info("你計劃記錄一個信息,id爲:"+random.Next().ToString());
//記錄調試信息
if (log.IsDebugEnabled)
log.Debug("調試信息,調試ID爲:" + random.Next().ToString());
//記錄警告信息
if (log.IsWarnEnabled)
{
log.Warn("警告:警告ID爲:" + random.Next().ToString());
}
}
(6)測試,隔一天運行一次你的控制檯應用程序。假設我昨天運行了一次,今天運行了一次。那麼在程序的bin\debug目錄下就會出現一個log文件夾,文件夾中會出現兩個文本文件“Log_20120427.log” 和“Log_20120428”。 打開其中一個文件就可以看到日誌記錄。
很想把示例程序上傳,無賴csdn太不好使了。後邊會提供示例下載鏈接
(7)下面是幾種常用的回滾日誌存儲方式,
(蒐集)
RollingFileAppender主要是基於FileAppender構建的,很多屬性方法都是繼承於FileAppender,所以在選項設置上,也有許多是相同的.
下面的例子使日誌文件名爲log.txt,日誌文件名是以文件大小進行變換的,如果舊日誌文件大小到100KB時,就會變換文件名爲log.txt.1,log.txt.2,log.txt.3...,一直到10爲止
<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>
下面的例子以時間週期變換日誌文件名,每分鐘都改變日誌的文件名,日誌文件名爲logfileyyyyMMdd-HHmm,這裏補充說明下,如果要在這個文件名後面加上.log後綴,必須使用轉義字符,比如<datePattern value="yyyyMMdd-HHmm".log"" />
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名開頭-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--變換的形式爲日期-->
<rollingStyle value="Date" />
<!--日期的格式-->
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面的例子綜合使用使用日期和文件大小變換日誌文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名開頭-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小變換日誌文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMdd" />
<!--最大變換數量-->
<maxSizeRollBackups value="10" />
<!--最大文件大小-->
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面例子是在每次程序運行的時候,都會備份原先的日誌文件,當運行的日誌文件大於50G的時候纔會變換日誌文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名-->
<file value="logfile.txt" />
<!--不追加到原文件-->
<appendToFile value="false" />
<!--以日誌文件大小變換文件名-->
<rollingStyle value="Size" />
<!--最大變換數量,-1爲不限制-->
<maxSizeRollBackups value="-1" />
<!--最大文件大小-->
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面是RollingFileAppender類中的部分Public Instance Properties(公共屬性)的說明,沒有全部測試,難免謬誤,如果你知道,請不要吝嗇告寫。
CountDirection : 定義當前文件是最小編號的文件還是最大編號的文件。默認爲-1,總是以更小的編號。
datePattern : DateFormatter日期格式,string類型。
Encoding : 就是文件的編碼,默認爲Default,就是程序本身的編碼了。
FilterHead : 分割符頭部。
ImmediateFlush : 表示是否立即輸出到文件,布爾型的。
LockingModel : 文件鎖類型,RollingFileAppender本身不是線程安全的,如果在程序中沒有進行線程安全的限制,可以在這裏進行配置,確保寫入時的安全。有兩中類型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 設置本Appander的名稱。
SecurityContext : 比較少應用,對日誌進行加密只類的,使用SecurityContextProvider轉換。(對日誌的保密要求比較高的時候應該可以應用上吧,Log4考慮的還挺周全)
Threshold : 設置內容級別的,比如:DEBUG,INFO等等。
RollingFileAppender主要是基於FileAppender構建的,很多屬性方法都是繼承於FileAppender,所以在選項設置上,也有許多是相同的.
下面的例子使日誌文件名爲log.txt,日誌文件名是以文件大小進行變換的,如果舊日誌文件大小到100KB時,就會變換文件名爲log.txt.1,log.txt.2,log.txt.3...,一直到10爲止
<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>
下面的例子以時間週期變換日誌文件名,每分鐘都改變日誌的文件名,日誌文件名爲logfileyyyyMMdd-HHmm,這裏補充說明下,如果要在這個文件名後面加上.log後綴,必須使用轉義字符,比如<datePattern value="yyyyMMdd-HHmm".log"" />
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名開頭-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--變換的形式爲日期-->
<rollingStyle value="Date" />
<!--日期的格式-->
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面的例子綜合使用使用日期和文件大小變換日誌文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名開頭-->
<file value="logfile" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小變換日誌文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMdd" />
<!--最大變換數量-->
<maxSizeRollBackups value="10" />
<!--最大文件大小-->
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面例子是在每次程序運行的時候,都會備份原先的日誌文件,當運行的日誌文件大於50G的時候纔會變換日誌文件名。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日誌文件名-->
<file value="logfile.txt" />
<!--不追加到原文件-->
<appendToFile value="false" />
<!--以日誌文件大小變換文件名-->
<rollingStyle value="Size" />
<!--最大變換數量,-1爲不限制-->
<maxSizeRollBackups value="-1" />
<!--最大文件大小-->
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
下面是RollingFileAppender類中的部分Public Instance Properties(公共屬性)的說明,沒有全部測試,難免謬誤,如果你知道,請不要吝嗇告寫。
CountDirection : 定義當前文件是最小編號的文件還是最大編號的文件。默認爲-1,總是以更小的編號。
datePattern : DateFormatter日期格式,string類型。
Encoding : 就是文件的編碼,默認爲Default,就是程序本身的編碼了。
FilterHead : 分割符頭部。
ImmediateFlush : 表示是否立即輸出到文件,布爾型的。
LockingModel : 文件鎖類型,RollingFileAppender本身不是線程安全的,如果在程序中沒有進行線程安全的限制,可以在這裏進行配置,確保寫入時的安全。有兩中類型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 設置本Appander的名稱。
SecurityContext : 比較少應用,對日誌進行加密只類的,使用SecurityContextProvider轉換。(對日誌的保密要求比較高的時候應該可以應用上吧,Log4考慮的還挺周全)
Threshold : 設置內容級別的,比如:DEBUG,INFO等等。
本想把示例程序上傳,無賴csdn太不好用了。