在前幾篇Log4net入門文件的講述過程中,我們在使用log4net的類中都要編寫如下一行代碼:
1 private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
如果有多個類都要使用log4net輸出日志信息,那麼每個類中都要編寫這一行代碼,為了避免這種情況的發生,我們將編寫一個靜態類來對log4net進行封裝。那麼,以後我們在什麼地方需要輸出日志信息,只需要調用這個靜態類的相應方法即可。實現步驟如下所示:
1、創建一個空白解決方案,命名為“Utils”。
2、在該解決方案中創建一個名為“Log4netUtil”的類庫項目,然後對該類庫項目使用“NuGet包管理器”安裝log4net程序集。
3、展開“Log4netUtil”類庫項目的“Properties”屬性,雙擊打開“AssemblyInfo.cs”文件,在該文件的最下面添加如下一行代碼:
1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.config", Watch = true)]
注意:上面一行代碼中的“Log4net.config”要與我們之後添加的配置文件的名字一致。
4、在“Log4netUtil”類庫項目中添加一個名為“Log4netHelper”的靜態類,代碼如下所示:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Log4netUtil 8 { 9 public static class Log4netHelper 10 { 11 private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 12 13 public static void Debug(object message) 14 { 15 log.Debug(message); 16 } 17 18 public static void Debug(object message, Exception exception) 19 { 20 log.Debug(message, exception); 21 } 22 23 public static void Info(object message) 24 { 25 log.Info(message); 26 } 27 28 public static void Info(object message, Exception exception) 29 { 30 log.Info(message, exception); 31 } 32 33 public static void Warn(object message) 34 { 35 log.Warn(message); 36 } 37 38 public static void Warn(object message, Exception exception) 39 { 40 log.Warn(message, exception); 41 } 42 43 public static void Error(object message) 44 { 45 log.Error(message); 46 } 47 48 public static void Error(object message, Exception exception) 49 { 50 log.Error(message, exception); 51 } 52 53 public static void Fatal(object message) 54 { 55 log.Fatal(message); 56 } 57 58 public static void Fatal(object message, Exception exception) 59 { 60 log.Fatal(message, exception); 61 } 62 } 63 }
5、右擊“Utils”解決方案,新建一個名為“Log4netTest”控制台應用程序,該應用程序主要用來測試log4net的幫助類是否正確運行。
6、右擊新創建的“Log4netTest”控制台應用程序的“引用”節點,添加對“Log4netUtil”類庫的引用。
7、在“Log4netTest”的根目錄下添加一個名為“Log4net.config”的配置文件,並將該配置文件的“復制到輸出目錄”屬性的值設置為“始終復制”,然後修改該配置文件的內容如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 5 </configSections> 6 7 <log4net> 8 <!-- 將日志以回滾文件的形式寫到文件中 --> 9 <!-- 按日期切分日志文件,並將日期作為日志文件的名字 --> 10 <appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender"> 11 <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 --> 12 <file value="C:\Logs\" /> 13 <!-- 將日志信息追加到已有的日志文件中--> 14 <appendToFile value="true" /> 15 <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 --> 16 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 17 <!-- 指定按日期切分日志文件 --> 18 <rollingStyle value="Date" /> 19 <!-- 日志文件的命名規則 --> 20 <datePattern value=""UtilLogs_"yyyyMMdd".log"" /> 21 <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false --> 22 <staticLogFileName value="false" /> 23 24 <layout type="log4net.Layout.PatternLayout"> 25 <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 26 </layout> 27 </appender> 28 29 <root> 30 <!-- 控制級別,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> 31 <!-- 比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄 --> 32 <!-- 如果沒有定義LEVEL的值,則缺省為DEBUG --> 33 <level value="ALL" /> 34 <!-- 按日期切分日志文件,並將日期作為日志文件的名字 --> 35 <appender-ref ref="RollingFileAppenderNameByDate" /> 36 </root> 37 </log4net> 38 </configuration>
8、雙擊打開“Log4netTest”項目中的“Program.cs”文件,修改該文件如下所示:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Log4netTest 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Log4netUtil.Log4netHelper.Info("Info信息!"); 14 } 15 } 16 }
運行控制台應用程序,我們即可看到日志文件正確生成!
源碼下載