日志是所有程序中都不可少的一部分,它能给调试和维护提供极大的帮助,从而极大提高开发和追踪bug的效率。为了让自己站在巨人的肩膀上,提高开发效率,log4net为实现日志提供便利。log4net的使用很方便,主要分为两部分:
其中log4net的下载地址:http://logging.apache.org/log4net/download_log4net.cgi
1. 在app.config中添加configsection
在app.config中configuration节点中添加如下节点,这个节点主要起声明作用。其中,name是指将要配置的节点名称,type是指name节点将要转换的类型以及其所在的dll库。这里特别需要注意的是configSections节点必须是configuration节点的第一个子节点,否则会报异常。
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
然后,再在configuration节点中加入如下log4net节点,这个节点就是log4net提供给用户来进行自定义配置,包括对log存储位置、文件名称格式、文件大小、记录的样式等。这个有兴趣的可以自行研究下,这里就不做介绍了。
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log\\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<param name="MaxSizeRollBackups" value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<!--文件形式记录日志-->
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
2. 在代码中封装log4net提供的函数
通常我们都是对log4net提供的函数进行封装,这样可以按需要定义自己需要打印的日志级别,并且可以提高代码的重用。首先我们可以新建一个LogHelper类,将log4net提供的函数封装成LogHelper类中的静态函数,这样方便使用。通常将日志分为异常、错误、Information和Debug(这里是我习惯的方式,读者可以按自己的喜好进行定义)。其中,需要特别注意代码中添加的程序集特性[assembly: log4net.Config.XmlConfigurator(Watch = true)],或者在程序初始化的地方加入log4net.Config.XmlConfigurator. Configure(),二者可以根据读者的编程习惯进行选择。它们的目的都是初始化log4net的xml节点配置信息。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace EnvironmentSetupUI
{
public class LogHelper
{
/// <summary>
/// 输出异常日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="ex"></param>
public static void WriteExceptionLog(Type t, Exception ex)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
log.Error("Exception", ex);
}
/// <summary>
/// 输出错误日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="error"></param>
public static void WriteErrorLog(Type t, string error)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
log.Error(error);
}
/// <summary>
/// 输出information日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="info"></param>
public static void WriteInfoLog(Type t, string info)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
log.Info(info);
}
/// <summary>
/// 输出debug日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="debug"></param>
public static void WriteDebugLog(Type t, string debug)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
log.Debug(debug);
}
}
}
此外,这是我的首篇博客,本文的目的是为读者提供使用log4net的快速通道,希望对读者有帮助。
本篇文章参考了柄棋先生的博客:http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html,在此表示感谢!有兴趣的可以看看这篇博文。