Log4net 是一个开源的类库,可以通过它将.NET 应用程序的日志记录到多种介质中(控制台、SMTP或者文本文件等)。Log4net 起源自Java应用中的log4J.
日志的记录通过一个或多个logger来实现。logger为日志信息提供了五种不同级别(由低至高):
1.Debug
2.Information
3.Warnings
4.Error
5.Fatal
每一个logger可以记录指定级别的日志信息,因此,5种不同级别的信息处理可有效帮助开发,而当项目发布后,你可以选择只记录Fatal级别的日志,这一切的配置都非常简单。
如何指定日志信息保存的地址呢?Appender用于指定保存日志信息保存的路径。利用Appender可以将日志信息保存至数据库、email等。你可以通过配置使用多个Appender,用于向多个介质中存储日志信息并可控制记录不同级别的日志信息。Appender的配置在一个外置的XML文件中,配置它是一件极其简单的事。
OK,我们知道通过Logger将日志信息保存到Appender指定的路径,而怎么指定日志信息保存的格式呢?Log4net通过配置每一个Appender的layouts来指定记录日志信息的格式。这些layouts指定日志信息是保有存为简单的文本还是XML文件,或是不是记录日志信息生成的时间等。
下面用代码说明如何使用Log4net
C# codeusing log4net;
using log4net.Config;
class LogTest
{
private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));
static LogTest()
{
XmlConfigurator.Configure();
}
static void Main(string[] args)
{
logger.Debug("Here is a debug log.");
logger.Info(".... and an Info log.");
logger.Warn(".... and a warning.");
logger.Error(".... and an error.");
logger.Fatal("... and a fatal error.");
}
}
Web config<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="LogTest.text"/>
<param name="AppendToFile" value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n"/>
<param name="Footer" value="[Footer]\r\n"/>
<param name="ConversionPattern" value="%d %-5p -- Line:%L %F %c %m%n"/>
</layout>
</appender>
<root>
<level value="Info"/> <!--value可以指定Debug/Info/Warn/Error/Fatal中的任意一种-->
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
</configuration>
控制台输出:
文本输出:
layout 的参数ConversionPattern的值的含义:
%d(date time):当前语句执行的时间
%p(priority):日志当前级别(Debug,Info,eg)
%L(line):输出语句所在的行号
%F(file):输出语句所在的文件名
%c(class):当前日志对象的名称
%m(message):当前记录的日志信息
%n(new line):换行
%t(thread id):当前语句所在的线程ID
%r(run time):输出程序从运行至执行当前语句消耗的毫秒数
%-数字:表示该项的最小长度,不够用空格填充(如%-5p)
注意:%后的字母区分大小写
根据应用程序需要可创建多个logger记录不同信息,如一个logger专门记录bug信息,而另一个logger专门记录网站流量信息,关于如何创建多个logger,
具体可参考:http://www.codeproject.com/KB/trace/log4net_intro2.aspx
关于logger对象的叠加,root 与自定义的logger之间存在继承关系(root 为父对象,自定义的logger为子对象),如果新建一个logger不与root 存在继承关系,可通过设置属性 additivity="false" 来完成。
具体可参考:http://raderustc.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-144436-uid-1406.html
本文部分翻译自:http://www.codeproject.com/KB/trace/log4net_intro.aspx