1. 程式人生 > >log4net日誌記錄 輕鬆上手

log4net日誌記錄 輕鬆上手

log4net 簡介

log4net是一個功能著名的開源日誌記錄元件。利用log4net可以方便地將日誌資訊記錄到檔案、控制檯、Windows事件日誌和資料庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。並且我們還可以記載控制要記載的日誌級別,可以記載的日誌類別包括:FATAL(致命錯誤)、ERROR(一般錯誤)、WARN(警告)、INFO(一般資訊)、DEBUG(除錯資訊)。

步驟一:通過Nuget安裝log4net

在選單欄中選擇工具->Nuget 包管理器->管理解決方案的Nuget 包管理器

,在瀏覽中的搜尋框中輸入log4net進行安裝

通過Nuget安裝log4ne

步驟二:新建log4net.config配置檔案

這裡寫圖片描述

將以下的內容全部覆蓋到新建的配置檔案中

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net
>
<root> <level value="DEBUG" /> <!--Info訊息記錄--> <appender-ref ref="InfoLogFileAppender"/> <!--Debug訊息記錄--> <appender-ref ref="DebugLogFileAppender"/> <!--Error訊息記錄--> <appender-ref ref="ErrorLogFileAppender"/>
</root> <!--定義輸出到檔案中--> <appender name="InfoLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="RollingStyle" value="Composite"/> <file value="Logs\info\"/> <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/> <appendToFile value="true"/> <staticLogFileName value="false"/> <param name="MaximumFileSize" value="10MB"/> <param name="CountDirection" value="-1"/> <maxSizeRollBackups value="1000"/> <layout type="log4net.Layout.PatternLayout"> <!--每條日誌末尾的文字說明--> <!--輸出格式--> <!--樣例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%newline %n記錄時間:%date %n執行緒ID:[%thread] %n日誌級別: %-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline %n"/> <param name="Footer" value="-------------------------------------------------------------- \r\n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> <!--最小鎖定模型以允許多個程序可以寫入同一個檔案--> <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" /> </appender> <!--定義輸出到檔案中--> <appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--建立新檔案的方式,可選為Size(按檔案大小),Date(按日期),Once(每啟動一次建立一個檔案), Composite(按日期及檔案大小),預設為Composite--> <param name="RollingStyle" value="Composite"/> <!--Log檔案路徑,如果RollingStyle為Composite或Date,則這裡設定為目錄,檔名在DatePattern裡設定, 其他則這裡要有檔名。已經擴充套件支援虛擬目錄--> <file value="Logs\debug\"/> <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/> <!--當檔案存在時,是否在原檔案上追加內容。--> <appendToFile value="true"/> <!--為true時,RollingStyler的date值將無效。且需要在file裡指定檔名,所有日誌都會記錄在這個檔案裡。--> <staticLogFileName value="false"/> <!--當RollingStyle為Composite或Size,這裡設定最大檔案大小(可以KB,MB,GB為單位,預設為位元組)--> <param name="MaximumFileSize" value="10MB"/> <!--當檔案超過MaximumFileSize的大小時,如果要建立新的檔案來儲存日誌,會根據CountDirection的值來重新命名檔案。 大於-1的值時,file裡指定的檔名會依次加上.0,.1,.2遞增。 個人理解就是log檔案正序,倒序的問題,-1為倒序(最新訊息在log檔名稱最小的檔案中),大於-1為正序(最新訊息在log檔名稱最大的檔案中)--> <param name="CountDirection" value="-1"/> <!--最大Log檔案備份數--> <maxSizeRollBackups value="1000"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="記錄時間:%date %n除錯輸出:%message %newline %n"/> <param name="Footer" value="[Footer]\r\n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" /> </appender> <!--定義輸出到檔案中--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="RollingStyle" value="Composite"/> <file value="Logs\error\"/> <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/> <appendToFile value="true"/> <staticLogFileName value="false"/> <param name="MaximumFileSize" value="1MB"/> <param name="CountDirection" value="-1"/> <maxSizeRollBackups value="1000"/> <layout type="log4net.Layout.PatternLayout"> <!--每條日誌末尾的文字說明--> <!--輸出格式--> <!--樣例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="%newline %n記錄時間:%date %n執行緒ID:[%thread] %n日誌級別: %-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline %n"/> <param name="Footer" value="-------------------------------------------------------------- \r\n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> <!--最小鎖定模型以允許多個程序可以寫入同一個檔案--> <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" /> </appender> </log4net> </configuration>

步驟三:新建LogHelper靜態類

/*
 log4net預設關聯的是應用程式的配置檔案App.config(BS程式是Web.config),可以使用程式集自定義屬性來進行設定。下面來介紹一下這個自定義屬性:log4net.Config.XmlConifguratorAttribute。

XmlConfiguratorAttribute有3個屬性:

ConfigFile: 配置檔案的名字,檔案路徑相對於應用程式目錄

(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile屬性不能和ConfigFileExtension屬性一起使用。

ConfigFileExtension: 配置檔案的副檔名,檔案路徑相對於應用程式的目錄。ConfigFileExtension屬性不能和ConfigFile屬性一起使用。

Watch: 如果將Watch屬性設定為true,就會監視配置檔案。當配置檔案發生變化的時候,就會重新載入。

如果ConfigFile和ConfigFileExtension都沒有設定,則使用應用程式的配置檔案App.config(Web.config)。

*/

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace WebApplication4
{
    public static class LogHelper
    {

        #region 方法 輸出致命錯誤

        /// <summary>
        /// 輸出致命錯誤
        /// </summary>
        /// <param name="t">發生錯誤的類的型別</param>
        /// <param name="ex">錯誤資訊</param>
        public static void WriteErrorLog(Type t, Exception ex)
        {
            var log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        }

        #endregion

    }
}

恭喜你成功配置log4net

把下面示例程式碼新增到你的啟動程式中,當執行後,可以在解決方案目錄下找到Logs資料夾

      LogHelper.WriteErrorlLog(typeof(_Default), new Exception("模擬發生錯誤"));

這裡寫圖片描述

後記:

在具體寫日誌時,一般可以這樣理解日誌等級:

FATAL(致命錯誤):記錄系統中出現的能使用系統完全失去功能,服務停止,系統崩潰等使系統無法繼續執行下去的錯誤。例如,資料庫無法連線,系統出現死迴圈。

ERROR(一般錯誤):記錄系統中出現的導致系統不穩定,部分功能出現混亂或部分功能失效一類的錯誤。例如,資料欄位為空,資料操作不可完成,操作出現異常等。

WARN(警告):記錄系統中不影響系統繼續執行,但不符合系統執行正常條件,有可能引起系統錯誤的資訊。例如,記錄內容為空,資料內容不正確等。

INFO(一般資訊):記錄系統執行中應該讓使用者知道的基本資訊。例如,服務開始執行,功能已經開戶等。

DEBUG (除錯資訊):記錄系統用於除錯的一切資訊,內容或者是一些關鍵資料內容的輸出。