前言
本文主要介绍了log4net这个类库以及它在winform程序下的简单用法。
什么是log4net
Log4net是帮助程序输出日志内容到不同目标中的一个类库。Log4net类库其实是Log4j框架向.NET运行时转变的一个类库。我们保留log4j的核心框架,并在.NET运行时中增加了新的特性。目前最新版本1.2.10.0,更多信息请参见官方网站http://logging.apache.org/log4net/
Log4net日志级别
日志级别由低到高分为以下几种:
1. DEBUG
2. INFO
3. WARN
4. ERROR
5. FATAL
如果我设置了级别为警告级别(WARN),则DEBUG和INFO级别的日志不会显示,只会显示本身和更高级别。
Log4net配置文件
它使用xml配置节点来使用,例如:
<?xml version='1.0' encoding='utf-8' ?>
<log4net>
<appender name='LogFileAppender' type='log4net.Appender.RollingFileAppender' >
<param name='File' value='d:\log\Applog.txt'/> //日志存放路径
<param name='AppendToFile' value='true'/>
<param name='datePattern' value='yyyy_MM_dd.lo\g' />
<param name='StaticLogFileName' value='false'/>
<param name='ImmediateFlush' value='true'/>//是否及时写入,这样可以提高速度
<param name='MaxSizeRollBackups' value='-1'/>
<param name='MaximumFileSize' value='5MB'/> //文件大小
<param name='RollingStyle' value='size'/> //分类的类型
<layout type='log4net.Layout.PatternLayout'>
<param name='ConversionPattern' value='[%date{HH:mm:ss,fff}][%5.5level][%method][%line]: %message %newline'/>
</layout>
</appender>
<logger name='MyLog'>
<level value='Error'/> //Log级别
<appender-ref ref='LogFileAppender'/>
</logger>
</log4net>
下面对对其中的layout节点下的参数做简要说明,如下表:
表示式 |
含义 |
date |
发生日志事件的本地时间。 使用 日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。 另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。 它们的性能要好于ToString。
|
location |
引发日志事件的方法(包括命名空间和类名),以及所在的源文件和行号。 警告:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。
|
level |
日志事件等级 |
line |
引发日志事件的行号 警告:会影响性能。
|
message |
由应用程序提供给日志事件的消息。
|
newline |
换行符
|
thread |
引发日志事件的线程,如果没有线程名就使用线程号。
|
method |
发生日志请求的方法名(只有方法名而已)。 警告:会影响性能。 |
下面给出一个控制台代码的例子:
using log4net;
class Program
{
static void Main(string[] args)
{
string str = @"<?xml version='1.0' encoding='utf-8' ?>"
+ @"<log4net>"
+ @" <appender name='LogFileAppender' type='log4net.Appender.RollingFileAppender' >"
+ @" <param name='File' value='d:\统计\Applog.txt'/>"
+ @" <param name='AppendToFile' value='true'/>"
+ @" <param name='datePattern' value='yyyy_MM_dd.lo\g' />"
+ @" <param name='StaticLogFileName' value='false'/>"
//是否及时写入,这样可以提高速度
+ @" <param name='ImmediateFlush' value='true'/>" //默认是true
+ @" <param name='MaxSizeRollBackups' value='-1'/>"
+ @" <param name='MaximumFileSize' value='5MB'/>" //文件大小
+ @" <param name='RollingStyle' value='size'/>" //分类的类型
+ @" <layout type='log4net.Layout.PatternLayout'>"
+ @" <param name='ConversionPattern' value='[%date{HH:mm:ss,fff}][%5.5level][%method][%line]: %message %newline'/>"
+ @" </layout>"
+ @" </appender>"
+ @" <logger name='MyLog'>"
+ @" <level value='Error'/>" //Log级别
+ @" <appender-ref ref='LogFileAppender'/>"
+ @" </logger>"
+ @"</log4net>";
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(str);
log4net.Config.XmlConfigurator.Configure(xmldoc.DocumentElement);
log4net.ILog log = log4net.LogManager.GetLogger("MyLog");
log.Debug("记录日志");
log.Error("记录日志");//错误
log.Warn("记录日志");//警告
log.Info("记录日志");
log.Fatal("记录日志");
}
}
我们要注意它输出的样式是这样的:
[%date{HH:mm:ss,fff}][%5.5level][%method][%line]: %message %newline
并且日志的级别为ERROR所以只能显示ERROR和FATAL级别的日志信息。如下图: