log4net, 是 apache.org 在 log4j的基礎上推出的針對.NET程式的開源的日誌組件。
log4net目前的最新版本是 1.2.10,log4net支援的日誌儲存方式,可謂豐富之極,包括:
- 存入SQL SERVER 資料庫
- 存入ACCESS資料庫
- 存入ORACLE資料庫
- 存入DB2資料庫
- 存入SQLLite資料庫
- 產生asp.net 的trace模式的日誌
- 緩衝方式的日誌
- 直接輸出到控制台螢幕(支援彩色)
- 存入系統日誌
- 產生單檔案日誌
- 產生多檔案日誌
- 儲存在記憶體中
- 利用net send 發送給指定的網路域或主機
- 遠程組建記錄檔
- 利用SMTP發送日誌到指定的郵箱
- 利用IIS的SMTP,將日誌放入MAIL目錄
- 利用UDP協議發送日誌
上面的,各種日誌儲存方式的具體配置細節, 在這裡
log4net的日誌記錄分為7級,從高到低為: OFF、FATAL、ERROR, WARN, INFO, DEBUG, ALL
要使用log4net,必須給log4net指定好設定檔, 有兩種方法:
- 放入 web.config 或 app.config
- 放入一個單獨的設定檔,如: log4net.config (推薦)
log4net的配置格式,大致如下:
<?xml version="1.0" encoding="utf-8" ?><log4net debug="false"> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><file value="log.txt" /><appendToFile value="true" /><rollingStyle value="Composite" /><datePattern value=".yyyyMMdd" /><maxSizeRollBackups value="10" /><maximumFileSize value="1MB" /><staticLogFileName value="true" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date %-5level %logger -%m%n" /></layout> </appender> <root> <level value="WARN" /> <appender-ref ref="RollingLogFileAppender" /> </root></log4net>
上面給出的是一個獨立的log4net的設定檔,大體解釋一下:
<log4net></log4net>是根,<root></root>是必須的,是所有日誌格式的根,其中定義了,日誌記錄的基礎層級,和當前啟用的日誌記錄方式, 上面的 appender 將繼承root的level
appender中的 type 指明了,採用哪種方式來記錄日誌,具體取值,大家去 這裡 查看
layout是日誌輸出格式的定義:
%d, %date :表示當然的時間
%level : 表示日誌的層級
%logger, %c:表示日誌產生的主題,通常是所在的類名,便於定位問題
%t, %thread: 表示 所在進程
%L: 表示產生日誌的代碼所在的行數
%m, %message :表示日誌的具體內容
%n, %newline: 換行
————————————————————————–
我上面的是一個多檔案日誌的配置, 每天產生一個記錄檔,日誌名字是 log.txt.20081228 的形式
下面重點說一下使用的具體步驟:
1. 加入 log4net.dll 的引用
2. 對於 web application 和 winform
在 AssemblyInfo.cs 中,加入
[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)]//log4net.config 是設定檔的名稱,可以自行設定//Watch 是表示在程式運行期間是否監視該設定檔的變動
3. 對於 website 項目,需要在 global.asax.cs 裡,加入
protected void Application_Start(Object sender, EventArgs e){ //配置log4net log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));}
4. 實際調用
class Program { private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); //System.Reflection.MethodBase.GetCurrentMethod().DeclaringType //是利用反射擷取當前類的type,記錄在日誌中,便於定位日誌發生的所在 static void Main(string[] args) { log.Error("這是一個錯誤記錄檔"); log.Fatal("這是一個致命的錯誤記錄檔"); log.Warn("這是一條警告日誌"); log.Info("這是一條普通訊息"); Console.Read(); } }
下面附上一張產生的日誌內容的:
案例完整代碼下載