介紹
- 定義
Log4net = Log for .NET,是 Apache Log4j(Java經典日誌框架) 在.NET平台的官方移植版本,一套成熟的開源日誌程式庫。 - 核心用途
專案引入之後,不用手寫檔案讀寫程式,就能快速實作程式日誌輸出;可用來記錄執行資訊、例外堆疊,方便除錯與排查線上問題。 - 名詞對照
- Log4j:Java生態老牌日誌元件
- Log4net:給C#/.NET使用的Log4j移植版本
安裝
現代.NET專案建議優先透過NuGet安裝:
dotnet add package log4net
也可以在Visual Studio的「管理NuGet套件」搜尋 log4net,一鍵完成安裝。
log4net早期主要手動下載dll參考,現在主流做法是使用NuGet。
Log4Net 環境設定
log4net可使用於各種專案,包含主控台、桌面應用程式以及網站程式。
使用步驟
步驟1:修改 Web.config,加入 log4net 組態
<?xml version="1.0"?>
<configuration>
<configSections>
<!-- 註冊log4net組態節點 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- 依照日期輪轉檔案輸出器 -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- 日誌存放路徑,建議使用相對路徑,不要寫死隨身碟絕對路徑 -->
<param name="File" value="logs\\"/>
<!-- 附加模式:true=持續追加日誌,false=程式啟動就清空檔案 -->
<param name="AppendToFile" value="true"/>
<!-- 最多保留的日誌檔案數量 -->
<param name="MaxSizeRollBackups" value="10"/>
<!-- 是否固定檔名 false=依日期產生不同檔案 -->
<param name="StaticLogFileName" value="false"/>
<!-- 檔案命名樣板 -->
<param name="DatePattern" value="yyyy-MM-dd".log""/>
<!-- 輪轉策略:Date=依照日期分割日誌 -->
<param name="RollingStyle" value="Date"/>
<!-- 日誌輸出格式樣板 -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<!-- ❗原截圖樣板多了%loggername,會造成日誌尾巴多出多餘文字,已經移除 -->
</layout>
</appender>
<!-- 根日誌組態,全域生效 -->
<root>
<!-- 日誌等級 all:輸出全部等級;可選:DEBUG/INFO/WARN/ERROR/FATAL/OFF -->
<level value="all"/>
<!-- 綁定上面定義的日誌輸出器 -->
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>Code language: HTML, XML (xml)
- 不要寫死絕對路徑
G:\xxx,部署到伺服器會直接失效,改用logs\\相對路徑; - 正式環境建議把
level調整成INFO或ERROR,避免大量DEBUG日誌耗盡磁碟空間。
步驟2:全域初始化 Log4Net
在專案 Global.asax 的 Application_Start 方法加上初始化程式碼,程式啟動時載入組態
protected void Application_Start(object sender, EventArgs e)
{
// 初始化log4net,讀取Web.config內的組態
log4net.Config.XmlConfigurator.Configure();
}Code language: JavaScript (javascript)
注意:少這一行,呼叫日誌完全不會產生檔案,是很常見的踩坑點。
步驟3:頁面取得Logger並輸出日誌
在 Default.aspx.cs 撰寫呼叫程式。可以放在任意位置,範例只示範其中一個頁面。
using log4net;
public partial class _Default : System.Web.UI.Page
{
// 取得日誌執行個體,字串是logger名稱,可自訂
public static readonly ILog log = LogManager.GetLogger("logger-name");
protected void Page_Load(object sender, EventArgs e)
{
log.Info("一般日誌");
log.Error("錯誤日誌");
// 其他可用等級
// log.Debug("偵錯日誌");
// log.Warn("警告日誌");
// log.Fatal("嚴重錯誤日誌");
}
}
開發規範建議:把 ILog 宣告為 static readonly,不要重複建立執行個體,提升執行效能。
執行結果說明
- 程式執行之後,網站根目錄會自動建立
logs資料夾; - 自動產生格式如
2026-08-04.log的日誌檔; - 檔案內輸出範例:
2026-08-04 15:30:22,123 [6] INFO logger-name - 一般日誌
2026-08-04 15:30:22,129 [6] ERROR logger-name - 錯誤日誌Code language: CSS (css)
補充說明
- 除了輸出檔案,Log4Net也支援輸出到主控台、資料庫、電子郵件;
- 新專案建議一併參考
NLog/Serilog,對 .NET Core/.NET 5+ 支援更好;Log4Net大多用於維護舊式WebForm、WinForms專案。
簡介與安裝
Next: 日誌就會寫入資料庫