在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率。而本菜鸟在大神推荐和指导下使用log4net这一插件工具,其中也学到了一些皮毛,所谓好记性不如烂笔头嘛。为此,将把这些心得体会记录下来,以免遗忘。同时,也为各位童鞋提供一些参考。在此声明,本文粗浅之极,大神莫入。
对于log4net有什么功能,这里就不赘述了。直接进入本文重点,也就是log4net的配置和简单使用。
首先,项目要引入log4net.dll。
然后,为项目增加配置文件——log4net.config
<log4net> <!--日志配置,按日期保存--> <appender name="DefaultLog" type="log4net.Appender.RollingFileAppender"> <file value="LogFiles\" /> <threshold value="WARN" /> <appendToFile value="true" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="30MB" /> <rollingStyle value="Composite" /> <datePattern value=‘yyyy-MM-dd".log"‘ /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <header value="-----------程序开始运行----------- " /> <footer value="-----------程序结束运行----------- " /> <conversionPattern value="%date [%thread] %-5level %logger - %message%n" /> </layout> </appender> <!--日志配置,按日期保存--> <appender name="BaseLog" type="log4net.Appender.RollingFileAppender"> <file value="LogFiles\" /> <appendToFile value="true" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="30MB" /> <rollingStyle value="Composite" /> <datePattern value=‘yyyy-MM-dd".log"‘ /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <header value="-----------程序开始运行----------- " /> <footer value="-----------程序结束运行----------- " /> <conversionPattern value="%date [%thread] %-5level - %message%newline" /> </layout> </appender> <!--控制台日志配置,按日期保存--> <appender name="ConsoleLog" type="log4net.Appender.RollingFileAppender"> <file value="LogFiles\" /> <appendToFile value="true" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="30MB" /> <rollingStyle value="Composite" /> <datePattern value=‘yyyy-MM-dd".log"‘ /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <header value="-----------程序开始运行----------- " /> <footer value="-----------程序结束运行----------- " /> <conversionPattern value="%date [%thread] %-5level - %message%newline" /> </layout> </appender> <!--窗体日志配置,按日期保存--> <appender name="FromLog" type="log4net.Appender.RollingFileAppender"> <file value="LogFiles\" /> <appendToFile value="true" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="30MB" /> <rollingStyle value="Composite" /> <datePattern value=‘yyyy-MM-dd".log"‘ /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <header value="-----------程序开始运行----------- " /> <footer value="-----------程序结束运行----------- " /> <conversionPattern value="%date [%thread] %-5level - %message%newline" /> </layout> </appender> <!-- 根级别,作为默认值 --> <root> <!-- OFF - 不输出任何日志 FATAL - 仅输异常 ERROR - 输出错误/异常信息 WARN - 输出警告/错误/异常信息 INFO - 输出普通/警告/错误/异常信息,默认 DEBUG - 输出调试/普通/警告/错误/异常信息 ALL - 与DEBUG相同 --> <level value="WARN" /> <!--如果找不到对应的logger,会自动使用这个默认的日志--> <appender-ref ref="DefaultLog" /> </root> <logger name="MyLog.Base.Log"> <level value="DEBUG" /> <appender-ref ref="BaseLog" /> </logger> <logger name="MyLog.Base.Console"> <level value="DEBUG" /> <appender-ref ref="ConsoleLog" /> </logger> <logger name="MyLog.Base.Form"> <level value="DEBUG" /> <appender-ref ref="FromLog" /> </logger> </log4net>
在此,简单解释上面配置文件的使用,首先是<appender/>和<logger/>节点必须成对,每对配置,就是一个日志输出的配置。<appender-ref ref="BaseLog" />中属性ref的值对应<appender>的属性name的值。而<layout/>中的信息为日志输出的格式信息。其他的,就不一一解释了。
配置文件完成以后,为了让log4跑起来,还需要添加一个调用类——Logger。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using log4net; namespace Base { public class Loggers { public static readonly ILog FormLogger = LogManager.GetLogger("MyLog.Base.Form"); public static readonly ILog ConsoleLogger = LogManager.GetLogger("MyLog.Base.Console"); public static readonly ILog BaseLogger = LogManager.GetLogger("MyLog.Base.Log"); } }
值得注意的是,上面类中GetLogger("MyLog.Base.Log")中“MyLog.Base.Log”必须和配置文件中<loggger name="MyLog.Base.Log">的name属性值保持一致。
之后,为了让log4net跑起来,还需要添加代码来加载log4net配置文件,根据大神的传授,有两种加载方法:
1、在程序文件AssemblyInfo.cs中加上
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
2、在程序load事件中加上
//读取log4net配置文件 log4net.Config.XmlConfigurator.Configure(new Uri(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "log4net.config"));
P.S:方法一我没有实现成功,可能是因为某些问题我没有发现,哪位童鞋知道原因可以告知我一下。不过方法二的使用成功了。
最后就是写入信息到文件的问题了,其实就一句代码:
Loggers.BaseLogger.Debug("Run Start");
同时,我们还可以根据日志输出的级别来选取输出的方法,日志的输出级别如下:
OFF - 不输出任何日志
FATAL - 仅输异常
ERROR - 输出错误/异常信息
WARN - 输出警告/错误/异常信息
INFO - 输出普通/警告/错误/异常信息,默认
DEBUG - 输出调试/普通/警告/错误/异常信息
ALL - 与DEBUG相同
本文完。
附注:log4net下载地址:点击打开链接
log4net日志的配置及简单应用