一个完整的配置文件的例子以下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件。html
<log4net> <!-- 错误日志类--> <logger name="logerror"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <!-- 信息日志类 --> <logger name="loginfo"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <!-- 错误日志附加介质--> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogError\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="100" /> <param name="MaxFileSize" value="10240" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".htm"" /> <param name="RollingStyle" value="Date" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <!-- 信息日志附加介质--> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".htm"" /> <param name="RollingStyle" value="Date" /> <!-- 信息日志布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> </log4net>
先不分析上面这段配置信息是什么意思。咱们先来回想一下咱们的日志类一般用来作什么,假设咱们有一个库存管理系统,分为两大模块,一个是出库,一个是入库。咱们可能想要出库的相关信息保存在某一个文件夹里面,入库的信息存在另外一个文件夹里面。这样,咱们一般的作法是用在日志类中不一样的路径将日志写到不一样位置,可是若是咱们不仅仅想要写到日志文件中,并且想要将这些日志文件插入数据库呢?通常来说,咱们会再创建一些方法,来写到数据库。另外,正常日志信息和错误日志信息的布局,咱们可能想要根据日志类型的不一样,改变信息的布局,好比错误日志里面有异常信息的记录,正常日志里面就没有异常的记录。数据库
总结地说,咱们的日志类的需求一般就是:一、可以按要求将日志写到不一样的介质上(文件、数据库、邮件等);二、可以根据日志类型的不一样,写到不一样的位置;三、能根据信息的类型,改变日志的布局。apache
不得不说,想要写好一个日志记录类仍是挺不容易的的,看是简单的需求要作好,也是须要下大工夫的。而这些在Log4Net中,只须要通过一些配置,就能够完成。若是你懒得写配置信息,也能够直接将上面的配置信息拷过去用。app
logger是负责日志的记录者,假设咱们须要记录一些正常的运行时日志和出现异常时的错误日志,那么咱们能够经过在配置文件当中添加两个Logger实现。
appender提供记录的介质,前面谈到,咱们可能要同时将数据记录到文件和数据库中,咱们能够简单地经过编写appender实现,并且Log4Net当中已经默认提供了一些经常使用的appender,咱们能够简单地修改一些配置文件就实现同时向数据库和同时向文件中写入的功能。布局
layout负责把记入的内容格式化。其实就是决定日志文件要长什么样子。spa
以错误日志类为例进行解释线程
<!-- 错误日志类--> <logger name="logerror"> <!-- 日志类的名字--> <level value="ALL" /> <!-- 定义记录的日志级别--> <appender-ref ref="ErrorAppender" /><!-- 记录到什么介质中--> </logger>
level定义记录的日志级别,就是说,你要记录哪一个级别以上的日志,级别由高往低依次是:日志
None |
Fatal |
ERROR |
WARN |
DEBUG |
INFO |
ALL |
级别的定义要注意,若是你定义DEBUG,那么低于DEBUG级别如下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用log.info()来写入一个日志信息,但是你在配置中指定level为DEBUG,因为INFO级别低于DEBUG,因此,不会被记入日志.这样的处理很是灵活code
appender-ref定义日志要写入到什么介质中中。上面例子中就是写入到ErrorAppender这个介质中,在ErrorAppender节点咱们能够定义跟日志有关的要写入到什么地方,日志文件的格式是什么等信息。htm
以ErrorAppender为例
<!-- 错误日志附加介质--> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪一种介质--> <param name="File" value="Log\\LogError\\" /> <!-- 输出到什么目录--> <param name="AppendToFile" value="true" /><!-- 是否覆写到文件中--> <param name="MaxSizeRollBackups" value="100" /><!-- 备份文件的个数--> <param name="MaxFileSize" value="10MB" /><!-- 单个日志文件最大的大小--> <param name="StaticLogFileName" value="false" /><!-- 是否使用静态文件名--> <param name="DatePattern" value="yyyyMMdd".htm"" /><!-- 日志文件名--> <param name="RollingStyle" value="Date" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender>
appender节点中,type=RollingFileAppender 的意思是将日志以回滚文件的形式写到文件中。
File节点中规定了文件要写入到什么目录中,上例中的“Log\\LogError\\”表明写入到“程序输入目录(Debug目录)\Log\LogError\”文件夹中。
AppendToFile节点规定了是否覆写到文件中。假设咱们已经有了一个20131028.htm日志文件,当为true的时候,日志文件会附加到这个文件上。为false的时候,Log4Net会先将原来的日志文件备份,生成一个新的日志文件(见下图)。
MaxFileSize 最大的文件大小。咱们可使用"KB", "MB" 或 "GB"为 MaxFileSize 做为后缀限定大小。默认的文件大小是10MB。
RollingStyle是文件建立的方式。上例中市设置为以Date方式建立新文件。
DatePattern 日期格式,当咱们设置了RollingStyle 为Date方式后,Log4Net会自动使用DatePattern 中的日期格式来建立新的日志文件。
MaxSizeRollBackups这个属性用来设置,当日志文件达到MaxFileSize大小,就自动建立备份文件。备份文件的多少由MaxSizeRollBackups决定。好比说,咱们是以日期格式做为日志文件名的,假设今天是2013-10-28,那么今天建立的日志文件名就是20131028.htm,当这个文件中要超过MaxFileSize的时候,Log4Net就自动将老的20131028.htm更名为20131028.htm.1,并建立一个新的20131028.htm文件。
StaticLogFileName 是否采用静态文件名。由于咱们这个例子是采用以日期做为文件名,天天的日志文件的名字都是动态的,因此上例中为false。若是采用静态文件名,那么日志文件的名字就是惟一肯定的。能够参考下面的配置文件进行设置。下面的配置文件中就是采用静态文件名,生成的日志文件名都是log.txt。
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="100KB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
layout就是布局。Layout中的ConversionPattern就是日志文件的格式,一些符号的介绍附加在下面。因为格式化的方式比较多,除了下面介绍的,你们也能够本身看看官方文档。
%m[%message] | 输出的日志消息 |
%n | 换行 |
%d[%datetime] | 输出当前语句运行的时刻 |
%r | 输出程序从运行到执行到当前语句时消耗的毫秒数 |
%d | 当前语句所在的线程ID |
%p | 日志的当前优先级别 |
%c | 当前日志对象的名称 |
%L | 输出语句所在的行号 |
%F | 输出语句所在的文件名 |
%-数字 | 表示该项的最小长度,若是不够,则用空格填充 |