簡介與安裝

介紹

  1. 定義
    Log4net = Log for .NET,是 Apache Log4j(Java經典日誌框架) 在.NET平台的官方移植版本,一套成熟的開源日誌程式庫。
  2. 核心用途
    專案引入之後,不用手寫檔案讀寫程式,就能快速實作程式日誌輸出;可用來記錄執行資訊、例外堆疊,方便除錯與排查線上問題。
  3. 名詞對照
  • 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&quot;.log&quot;"/>
      <!-- 輪轉策略: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)
  1. 不要寫死絕對路徑 G:\xxx,部署到伺服器會直接失效,改用 logs\\ 相對路徑;
  2. 正式環境建議把 level 調整成 INFOERROR,避免大量DEBUG日誌耗盡磁碟空間。
步驟2:全域初始化 Log4Net

在專案 Global.asaxApplication_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,不要重複建立執行個體,提升執行效能。

執行結果說明

  1. 程式執行之後,網站根目錄會自動建立 logs 資料夾;
  2. 自動產生格式如 2026-08-04.log 的日誌檔;
  3. 檔案內輸出範例:
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專案。

簡介與安裝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *