源碼下載app
使用VS2010新建TestForm工程,使用log4net的步驟以下:佈局
一、引用log4net.dll(最新的版本是1.2.13);spa
二、新建的項目沒有App.config文件,添加新建項「應用程序配置文件」 App.config;線程
三、在App.config中添加以下內容:rest
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"/> </configSections> <log4net> <root> <level value="ALL"/> <appender-ref ref="LogFileAppender"/> </root> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="log-file.txt"/> <param name="AppendToFile" value="true"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}>%n - %m%n"/> </layout> </appender> </log4net>
四、在Properties的AssemblyInfo.cs文件末尾添加以下內容:日誌
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
五、添加一個button,全部代碼以下:code
namespace TestForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { log4net.ILog log = log4net.LogManager.GetLogger("My1stLogger"); log.Debug("hello"); } } }
六、運行後點擊button,在Debug文件夾(TestForm.exe所在的文件夾)下,有log-file.txt文件,打開內容以下:orm
2014-06-10 14:05:30,561 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:30,679 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:31,037 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:31,249 [9] DEBUG My1stLogger [(null)] <(null)> - hello
七、格式符含義(轉換模式(ConversionPattern)):xml
%d:打印日誌的時間,精確到毫秒【2014-06-10 14:38:11,112】
%n:回車;
%m:日誌內容;
%c:你在程序中使用【log4net.ILog log = log4net.LogManager.GetLogger("My1stLogger");】建立的日誌的名字My1stLogger;
%p:日誌級別或者叫信息類型(Fatal--Debug--Info--......);
%F:所在類或者叫所在文件名,好比【D:\TestForm\Form1.cs】
%L:打印日誌的語句所在文件中的行號。
%-數字:表示該項的最小長度,若是不夠用空格填充。
---------------------
%m(message):輸出的日誌消息,如ILog.Debug(…)輸出的一條消息
%n(new line):換行
%d(datetime):輸出當前語句運行的時刻
%r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
%t(thread id):當前語句所在的線程ID
%p(priority): 日誌的當前優先級別,即DEBUG、INFO、WARN…等
%c(class):當前日誌對象的名稱,例如:
模式字符串爲:%-10c -%m%n
代碼爲:
ILog log=LogManager.GetLogger(「Exam.Log」);
log.Debug(「Hello」);
則輸出爲下面的形式:
Exam.Log - Hello
%L:輸出語句所在的行號
%F:輸出語句所在的文件名
%-數字:表示該項的最小長度,若是不夠,則用空格填充
例如,轉換模式爲%r [%t]%-5p %c - %m%n 的 PatternLayout 將生成相似於如下內容的輸出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
---------------------
TestForm2演示程序的配置文件:
注意:對於Header和Footer,程序每從新啓動一次,會產生新的header和footer。
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"/> </configSections> <log4net> <!--使用Rolling方式記錄日誌按照日來記錄日誌--> <appender name="RunLog" type="log4net.Appender.RollingFileAppender"> <!--文件名,能夠相對路徑,也能夠絕對路徑,這裏只給定了文件夾--> <file value="log\\runtime\\"/> <!--最小鎖定模型以容許多個進程能夠寫入同一個文件,解決文件獨佔問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!--是否增長文件--> <appendToFile value="true"/> <!--日誌追加類型,Date爲按日期增長文件,Size爲按大小--> <rollingStyle value="Date"/> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件後綴--> <datePattern value="yyyyMM\\yyyy-MM-dd".log""/> <!--是否固定文件名--> <staticLogFileName value="false"/> <!--內容佈局--> <layout type="log4net.Layout.PatternLayout"> <!--頭部--> <header value="----------------------header-------------------------- "/> <!--結尾--> <footer value="----------------------footer-------------------------- "/> <!--輸出格式化--> <conversionPattern value="當前時間:%d [%p] %m %n"/> </layout> <!--過濾器--> <filter type="log4net.Filter.LevelRangeFilter"> <!--只接受最小等級與最大等級之間的日誌輸出,這裏只接受INFO級別的輸出--> <param name="LevelMin" value="INFO"/> <param name="LevelMax" value="INFO"/> </filter> </appender> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <file value="log\\error\\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyyMM\\yyyy-MM-dd".log""/> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <header value="----------------------header-------------------------- "/> <footer value="----------------------footer-------------------------- "/> <conversionPattern value="當前時間:%d 錯誤類型:[%p] 信息:%m 所在類:%F 所在行:%L %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--只接受最小等級與最大等級之間的日誌輸出,其餘的被過濾,這裏接受WARN(警告),ERROR(錯誤),FATAL(致命)級別的輸出--> <param name="LevelMin" value="WARN"/> <param name="LevelMax" value="FATAL"/> </filter> </appender> <!--定義日誌的輸出媒介--> <root> <!--RollingFileAppender事件日誌--> <appender-ref ref="RunLog"/> <appender-ref ref="ErrorLog"/> </root> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>