如何使用 C# 中的 log4net 記錄日志
譯文鏈接:https://www.infoworld.com/article/3120909/how-to-work-with-log4net-in-c.html
在項(xiàng)目開(kāi)發(fā)時(shí),你可能想記錄一些應(yīng)用程序日志,這些日志包括:應(yīng)用程序執(zhí)行流,用戶行為數(shù)據(jù)或者程序的一些報(bào)錯(cuò)信息,在 .NET 世界中有非常多的日志框架,然而?log4net?是目前為止最流行的一款日志框架,它是一款開(kāi)源的項(xiàng)目(java 的 log4j 開(kāi)源移植版),并且可以將應(yīng)用程序日志輸出到不同的 target 中,eg:數(shù)據(jù)庫(kù),文件,redis,elasticsearch 等等。
安裝 log4net
使用?NuGet Package Manager?是安裝 log4net 最簡(jiǎn)單也是最快速的方式,假設(shè)你已經(jīng)在 Visual Studio 中創(chuàng)建了一個(gè) Console Application 項(xiàng)目,你可以通過(guò) Nuget Manager 按照下面的步驟一步一步的進(jìn)行安裝。
在?
Solution Explorer Window?的 project 上點(diǎn)擊右鍵。點(diǎn)擊?
Manage NuGet Packages點(diǎn)擊?
Online?并且在輸入框中搜索 log4net然后選擇你需要安裝的 log4net 包。
點(diǎn)擊?
Install?開(kāi)始進(jìn)行包安裝
可以參考下面的圖:

到目前為止,最新的 log4net 版本是 2.0.12,稍等片刻你會(huì)在?NuGet Package Manager?中觀察到 log4net 已經(jīng)成功安裝,同時(shí)你應(yīng)該可以觀察到 log4net 已成功添加到 project項(xiàng)目的 引用列表中了,如下圖:

配置 log4net
現(xiàn)在你的 log4net 已經(jīng)被成功安裝,project 的 Properties 文件夾下有一個(gè) AssemblyInfo.cs 文件,在這個(gè)文件中增加如下行,如果你沒(méi)有一些自定義的配置,可以不用考慮下面的方式。
[assembly:?log4net.Config.XmlConfigurator(ConfigFile?=?"Log4Net.config",?Watch?=?true)]
作為替代方案,你可以將 log4net 的配置直接送到 app.config 或者 web.config 中,使用如下配置:
[assembly:?log4net.Config.XmlConfigurator(Watch?=?true)]
有時(shí)候,你可能不想把 log4net 的配置信息放在 app.config 或者 web.config 中,這時(shí)候你可以專門指定一個(gè)配置文件,比如:log4net.config。
[assembly:?log4net.Config.XmlConfigurator(ConfigFile?=?"log4net.config",?Watch?=?true)]
接下來(lái)就需要在 app.config 或者 web.config 中指定 log4net 的一些詳細(xì)配置信息了,假定你使用的是 console 應(yīng)用程序,在 configSections 節(jié)點(diǎn)中新增一個(gè)名稱為 log4net 的 section 節(jié)點(diǎn),如下代碼所示:
<configSections>
???<section?name="log4net"?type="log4net.Config.Log4NetConfigurationSectionHandler,?log4net"?/>
configSections>
現(xiàn)在,你可以在??節(jié)點(diǎn)之后添加一個(gè)??節(jié)點(diǎn),在??節(jié)點(diǎn)內(nèi)部添加如下的詳細(xì)配置信息。
<log4net>
???<appender?name="LogFileAppender"?type="log4net.Appender.RollingFileAppender">
?????<param?name="File"?value="C:\\Projects\\Personal\\IDG\\IDG.log"/>
?????<lockingModel?type="log4net.Appender.FileAppender+MinimalLock"?/>
?????<appendToFile?value="true"?/>
?????<rollingStyle?value="Size"?/>
?????<maxSizeRollBackups?value="10"?/>
?????<maximumFileSize?value="1MB"?/>
?????<staticLogFileName?value="true"?/>
?????<layout?type="log4net.Layout.PatternLayout">
???????<conversionPattern?value="%date?[%thread]?%level?%logger?-?%message%newline"?/>
?????layout>
???appender>
???<root>
?????<level?value="ALL"?/>
?????<appender-ref?ref="LogFileAppender"?/>
???root>
log4net>
這就是 log4net 的所有配置,接下來(lái)簡(jiǎn)單瀏覽下這些配置信息,這里我在??屬性中指定了 logger 的 name 和 type,在這個(gè)例子中我使用的是RollingFileAppender,其實(shí) log4net 支持很多種的 Appender,比如 AdoNetAppender,AspNetTraceAppender,ConsoleAppender 等等,更多的 Appender 設(shè)定可以看看這個(gè)鏈接:http://logging.apache.org/log4net/release/config-examples.html
使用 log4net
接下來(lái)可以寫代碼了,用 LogManager 類的 靜態(tài)方法 GetLogger 來(lái)創(chuàng)建一個(gè)實(shí)例,這個(gè)實(shí)例實(shí)現(xiàn)了 ILog 接口,如下代碼所示:
private?static?readonly?log4net.ILog?log?=?
log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
現(xiàn)在你可以使用這個(gè) log 實(shí)例去記錄日志到你指定的 target 中,下面的代碼段就展示了如何利用 log 去記錄日志。
log.Debug("This?is?a?Debug?message");
log.Info("This?is?a?Info?message");
log.Warn("This?is?a?Warning?message");
log.Error("This?is?an?Error?message");
log.Fatal("This?is?a?Fatal?message");
下面是一個(gè)完整的代碼清單,使用 log4net 去記錄異常信息到一個(gè) text 文本中。
class?Program
???{
???????static?readonly?log4net.ILog?log?=
???????log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
???????static?void?Main(string[]?args)
???????{
???????????try
???????????{
???????????????throw?new?Exception("This?is?test?message...");
???????????}
???????????catch(Exception?ex)
???????????{
???????????????log.Error(ex.Message);
???????????}??????????
???????????Console.Read();
???????}
???}
執(zhí)行完上面的程序之后,IDG.log 日志文件就會(huì)生成,里面會(huì)有一條我指定的異常信息,再配上一條當(dāng)時(shí)記錄日志的時(shí)間,這個(gè)時(shí)間信息非常重要,最后,除了本篇介紹的用 配置文件 的形式進(jìn)行配置,你也可以通過(guò)編程的方式進(jìn)行 log4net 配置。
轉(zhuǎn)至微信公眾號(hào):碼農(nóng)讀書(shū)
