在正式开始之前,我们有必要介绍一下FileAppender和RollingFileAppender的区别。
FileAppender和RollingFileAppender都是用来将日志写入到文本文件中。但是,RollingFileAppender提供了更多的选项,可以很方便的控制何时新建一个新的文本文件。
这个还是很有必要的,想象以下,你把所有的日志都记录到一个文本文件中,即使系统再小,日复一日,你也会有找不到日志的时候,何况,随着文本的增大,文本的写入与打开也会想得更加的慢,甚至出现超时。因此,本文我们主要介绍RollingFileAppender.
在web.config中添加配置
要使用log4net,必须在web.config增加配置节点,具体节点如下:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
配置log4net文件
我们配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="GlobalFile" type="log4net.Appender.RollingFileAppender">
<file value="Global/log"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd-HHmm".txt""/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="GlobalFile"/>
</root>
<logger name="Global">
<level value="DEBUG"/>
</logger>
</log4net>
1)root
root是log4net配置文件必须的,所有日志对象(logger)都是继承自root。在root中,可以定义level和appender,如果level没有定义,则默认为DEBUG;appender-ref定义了日志对象所使用的Appender,此处为GlobalFile,
2)logger
logger定义了具体的日志对象的设置
在logger中,name指定了日志的名字,通过改名字,我们可以使用
ILog logger = LogManager.GetLogger("Global");
来获取改名字的日志;
logger一样可以定义level以及appender
3)appender(此处指RollingFileAppender)
appender的name指定了appender的名字,用来在root或logger中作为ref的值。type指定了appender的类型,目前log4net定义了20几种appender以满足不同情况的输出,同时,我们还可以定义自己的appender;
appender的file指定了log存储文件的路径,如果该路径不存在会自动创建;
appenderToFile:标识是添加到现有文件中还是覆盖原有的日志,true表示添加到现有日志文件
rollingStyle:新建一个日志文件的方式,有4种取值方式Once, Date, Size, Composite默认为Composite,各种方式从源代码的定义也不难看出:
public class RollingFileAppender : FileAppender
{
#region Public Enums
/// <summary>
/// Style of rolling to use
/// </summary>
/// <remarks>
/// <para>
/// Style of rolling to use
/// </para>
/// </remarks>
public enum RollingMode
{
/// <summary>
/// Roll files once per program execution
/// </summary>
/// <remarks>
/// <para>
/// Roll files once per program execution.
/// Well really once each time this appender is
/// configured.
/// </para>
/// <para>
/// Setting this option also sets <c>AppendToFile</c> to
/// <c>false</c> on the <c>RollingFileAppender</c>, otherwise
/// this appender would just be a normal file appender.
/// </para>
/// </remarks>
Once = 0,
/// <summary>
/// Roll files based only on the size of the file
/// </summary>
Size = 1,
/// <summary>
/// Roll files based only on the date
/// </summary>
Date = 2,
/// <summary>
/// Roll files based on both the size and date of the file
/// </summary>
Composite = 3
}
MaximumFileSize:文件的最大值,可以使KB或MB为单位,与MaxFileSize 可以使用bytes来设值;
MaxSizeRollBackups:设置变换文件大小的文件值即,当文件超过设定值时,则新建文件;
DatePattern :指定生成文件的格式
layout:设定日志的输出格式,各个参数所代表的意思,格式太多,具体可参照官方文档:http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html
几个主要的说明如下;
%m:message,
%d: date,记录log的时间,
%n:new line,
%c:class 当前日志对象的名字
%L:语句所在行号
%F:语句所在文件名
在程序中使用log4net
了解问配置文件之后,让我们看看如何来记录log并输出到文件中
首先需要读取log4net的配置文件:
log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/log4net.xml")));
然后,LoggerManager的静态方法GetLogger()来获取已经存在的logger对象,如果不存在,则会新建一个logger对象:
ILog logger = LogManager.GetLogger("Global");
获取logger对象之后,我们就可以往该对象里面记录log:
logger.Debug("test rolling file appender."+currentTime.ToString());
几步完成之后,就可以在我们配置的路径下看到log文件了,以下是log中的记录
2012-03-11 17:51:22,411 [5] DEBUG Global [(null)] - test rolling file appender.2012/3/11 17:51:22