(2)log4net之FileAppender

在正式开始之前,我们有必要介绍一下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&quot;.txt&quot;"/>
    <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等价,唯一不一样的是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
原文地址:https://www.cnblogs.com/tian2010/p/2390402.html