一直想找一個好用的日子類,今天偶然的機會看到了log4net這個類庫,過來學習一下。html
log4net是.NET框架下的一個日子類庫,官網是http://logging.apache.org/log4net/,打開就一股濃濃的Apache 風格撲鼻而來。web
http://apache.fayea.com//logging/log4net/binaries/log4net-1.2.15-bin-newkey.zip數據庫
├─bin
│ ├─cli
│ │ └─1.0
│ ├─mono
│ │ ├─1.0
│ │ ├─2.0
│ │ ├─3.5
│ │ └─4.0
│ ├─net
│ │ ├─1.0
│ │ ├─1.1
│ │ ├─2.0
│ │ ├─3.5
│ │ ├─4.0
│ │ └─4.5
│ └─net-cp
│ ├─3.5
│ └─4.0
└─docapache
若是是win下的通常使用net文件夾,找到對應的.net版本引用dll便可。緩存
配置網絡
按照官方文檔的說明配置能夠經過代碼和配置文件兩種。併發
經過配置文件配置通常是使用系統的配置文件,好比WinForm的app.config,Web的web.config,也能夠自定義xml文件,可是要經過log4net.Config.XmlConfigurator.Configure(…)手動初始化。app
一個簡單的配置文件模板以下:框架
<?xml version="1.0" encoding="utf-8"?> <configuration> <configsections><section name="log4net" type="System.Configuration.IgnoreSectionHandler"> <log4net> <appender name="X" type="log4net.Appender.X"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="XX"> </conversionpattern></layout> </appender> <root> <level value="XXX"> <appender-ref ref="X"> </appender-ref></level></root> </log4net></section></configsections></configuration>
%m(message):輸出的日誌消息,如ILog.Debug(…)輸出的一條消息
%n(new line):換行
%d(datetime):輸出當前語句運行的時刻
%r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
%t(thread id):當前語句所在的線程ID
%p(priority): 日誌的當前優先級別,即DEBUG、INFO、WARN…等
%c(class):當前日誌對象的名稱,例如:
%f(file):輸出語句所在的文件名。
%l(line):輸出語句所在的行號。
%數字:表示該項的最小長度,若是不夠,則用空格填充,如「%-5level」表示level的最小寬度是5個字符,若是實際長度不夠5個字符則以空格填充。函數
(若是是WinForm,這個庫是不能本身創建控制檯窗體的,能夠經過WinAPI的 [DllImport(「kernel32.dll」)]public static extern Boolean AllocConsole(); 先自行建立控制檯)
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appender>
<appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender"> <mapping> <level value="ERROR"> <forecolor value="White"> <backcolor value="Red"> </backcolor></forecolor></level></mapping> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appender>
<appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log-file.txt"> <appendtofile value="true"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"> </conversionpattern></layout> </appendtofile></file></appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\\"> <appendtofile value="true"> <datepattern value="yyyy\\MM\\dd'.txt'"> <staticlogfilename value="false"> <layout type="log4net.Layout.PatternLayout"> <conversionpattern value="記錄時間:%date %n線程ID:[%thread] %n日誌級別: %-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message %n"> </conversionpattern></layout> </staticlogfilename></datepattern></appendtofile></file></appender>
<appender name="ForwardingAppender" type="log4net.Appender. ForwardingAppender"> <threshold value="WARN"> <appender-ref ref="RollingFileAppender"> </appender-ref></threshold> </appender>
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> <buffersize value="100"> <appender-ref ref="RollingFileAppender"> </appender-ref></buffersize> </appender>
經過代碼動態配置主要經過這個函數:
log4net.Config.BasicConfigurator.Configure()
他有5個重載:
public static ICollection Configure(); public static ICollection Configure(IAppender appender); public static ICollection Configure(params IAppender[] appenders); public static ICollection Configure(ILoggerRepository repository); public static ICollection Configure(ILoggerRepository repository, IAppender appender); public static ICollection Configure(ILoggerRepository repository, params IAppender[] appenders);
appender參數應該和簽名XML配置差很少。
調用很簡單啦。如今類裏面見一個對象:
private static readonly ILog log = LogManager.GetLogger(typeof(JSShareObj));
其中public static ILog GetLogger(Type type)中的參數type會顯示在前面模板中的%logger中。
而後就能夠調用log的各類方法了:
Log.Debug,Log.Error,Log.Fatal,Log.Info,Log.Warn