在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率。而本菜鸟在大神推荐和指导下使用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下载地址:点击打开链接