Log4net入门(帮助类篇)
在前几篇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 }
运行控制台应用程序,我们即可看到日志文件正确生成!