log4net日誌記錄 輕鬆上手
阿新 • • 發佈:2018-11-12
log4net 簡介
log4net是一個功能著名的開源日誌記錄元件。利用log4net可以方便地將日誌資訊記錄到檔案、控制檯、Windows事件日誌和資料庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。並且我們還可以記載控制要記載的日誌級別,可以記載的日誌類別包括:FATAL(致命錯誤)、ERROR(一般錯誤)、WARN(警告)、INFO(一般資訊)、DEBUG(除錯資訊)。
步驟一:通過Nuget安裝log4net
在選單欄中選擇工具->Nuget 包管理器->管理解決方案的Nuget 包管理器
步驟二:新建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"\\"yyyyMMdd".log""/>
<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"\\"yyyyMMdd".log""/>
<!--當檔案存在時,是否在原檔案上追加內容。-->
<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"\\"yyyyMMdd".log""/>
<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 (除錯資訊):記錄系統用於除錯的一切資訊,內容或者是一些關鍵資料內容的輸出。