log4net 是移植自 Java log4j 的成熟日誌框架,支援多等級、多輸出端、彈性格式。本文以 WinForms 專案為例,詳述從下載、引用、設定檔撰寫到程式碼呼叫的完整流程。
incubating-log4net-1.2.10.zip\log4net-1.2.10\bin\net\2.0\release 取得 log4net.dlllog4net.dll 複製至專案 bin\Debug(或統一 Lib 資料夾)置於 bin\Debug(輸出目錄),內容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
<logger name="com.suntom">
<level value="DEBUG" />
</logger>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="./log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
</log4net>
</configuration>
| 元素 | 用途 |
|---|---|
root/level | 全域預設等級(此處 WARN) |
logger name="com.suntom" | 特定命名空間覆蓋等級(DEBUG) |
PatternLayout | %d 時間、%t 執行緒、%p 等級、%c 類別、%m 訊息、%n 換行 |
LevelRangeFilter | 限制此 Appender 只輸出 DEBUG~FATAL |
在 AssemblyInfo.cs 末尾加入:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", ConfigFileExtension = "xml", Watch = true)]
Watch = true:檔案異動自動重載,無需重啟應用程式。using log4net;
public class TestClass {
private static readonly ILog log = LogManager.GetLogger(typeof(TestClass));
public void InitMenus() {
log.Debug("Enter InitMenus()");
// 業務邏輯...
}
}
執行程式觸發日誌後,bin\Debug\log.txt 將包含:
2011-07-04 22:38:58,226 [10] DEBUG com.suntom.TestClass - Enter InitMenus()
type 屬性的組件名稱需與實際引用 dll 版本一致(log4net 而非 log4net-net-1.0)。web.config 的 configSections,並移除 ConfigFile 參數(直接讀 web.config 區段)。root level 設為 INFO 或 WARN,避免 DEBUG 量大影響效能。