說明:本程式示範如何利用log4net記錄程式日誌資訊。log4net是一個功能著名的開源日誌記錄組件。利用log4net可以方便地將日誌資訊記錄到檔案、控制台、Windows事件記錄和資料庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。並且我們還可以記載控制要記載的記錄層級,可以記載的日誌類別包括:FATAL(致命錯誤)、ERROR(一般錯誤)、WARN(警告)、INFO(一般資訊)、DEBUG(調試資訊)。要想擷取最新版本的log4net組件庫,可以到官方網站http://logging.apache.org/log4net/下載。現在的最新版本是1.2.10。
下面的例子展示了如何利用log4net記錄日誌 。
首先從官方網站下載最近版本的log4net組件,現在的最新版本是1.2.10。在程式中我們只需要log4net.dll檔案就行了,添加對log4net.dll的引用,就可以在程式中使用了。
接著我們配置相關的設定檔(WinForm對應的是*.exe.config,WebForm對應的是*.config),本執行個體中是控制台應用程式,配置如下(附各配置的說明): <? xml version="1.0" encoding="utf-8" ?>
< configuration >
< configSections >
< section name ="log4net" type ="System.Configuration.IgnoreSectionHandler" />
</ configSections >
< appSettings >
</ appSettings >
< log4net >
<!-- 定義輸出到檔案中 -->
< appender name ="LogFileAppender" type ="log4net.Appender.FileAppender" >
<!-- 定義檔案存放位置 -->
< file value ="D:/log4netfile.txt" />
< appendToFile value ="true" />
< rollingStyle value ="Date" />
< datePattern value ="yyyyMMdd-HH:mm:ss" />
< layout type ="log4net.Layout.PatternLayout" >
<!-- 每條日誌末尾的文字說明 -->
< footer value ="by 周公" />
<!-- 輸出格式 -->
<!-- 範例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info -->
< conversionPattern value ="記錄時間:%date 線程ID:[%thread] 記錄層級:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline" />
</ layout >
</ appender >
<!-- 定義輸出到控制台命令列中 -->
< appender name ="ConsoleAppender" type ="log4net.Appender.ConsoleAppender" >
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</ layout >
</ appender >
<!-- 定義輸出到windows事件中 -->
< appender name ="EventLogAppender" type ="log4net.Appender.EventLogAppender" >
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</ layout >
</ appender >
<!-- 定義輸出到資料庫中,這裡舉例輸出到Access資料庫中,資料庫為C盤的log4net.mdb -->
< appender name ="AdoNetAppender_Access" type ="log4net.Appender.AdoNetAppender" >
< connectionString value ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
< commandText value ="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
<!-- 定義各個參數 -->
< parameter >
< parameterName value ="@logDate" />
< dbType value ="String" />
< size value ="240" />
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%date" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@thread" />
< dbType value ="String" />
< size value ="240" />
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%thread" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@logLevel" />
< dbType value ="String" />
< size value ="240" />
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%level" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@logger" />
< dbType value ="String" />
< size value ="240" />
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%logger" />
</ layout >
</ parameter >
< parameter >
< parameterName value ="@message" />
< dbType value ="String" />
< size value ="240" />
< layout type ="log4net.Layout.PatternLayout" >
< conversionPattern value ="%message" />
</ layout >
</ parameter >
</ appender >
<!-- 定義日誌的輸出媒介,下面定義日誌以四種方式輸出。也可以下面的按照一種類型或其他類型輸出。 -->
< root >
<!-- 檔案形式記錄日誌 -->
< appender-ref ref ="LogFileAppender" />
<!-- 控制台控制顯示日誌 -->
< appender-ref ref ="ConsoleAppender" />
<!-- Windows事件記錄 -->
< appender-ref ref ="EventLogAppender" />
<!-- 如果不啟用相應的日誌記錄,可以通過這種方式注釋掉
<appender-ref ref="AdoNetAppender_Access" />
-->
</ root >
</ log4net >
</ configuration >
程式檔案: using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using log4net;
// 注意下面的語句一定要加上,指定log4net使用.config檔案來讀取配置資訊
// 如果是WinForm(假定程式為MyDemo.exe,則需要一個MyDemo.exe.config檔案)
// 如果是WebForm,則從web.config中讀取相關資訊
[assembly: log4net.Config.XmlConfigurator(Watch = true )]
namespace Log4NetDemo
{