日志组件log4net学习总结
记录的日志类别主要有FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)五种。
1.在配置文件中添加以下配置节,并在顶级节点<configuration>下增加<log4net>子节点。
<configSections>
<section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
2.在<log4net>节点下增加<appender>子节点,每个<appender>子节点代表一种记录日志的方式,但并不代表启用。
<appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<PreserveLogFileNameExtension value="true" />
<!--日志文件名开头-->
<File value="\Logs\err.log" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小变换日志文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMddHHmm" />
<!--最大变换数量-->
<maxSizeRollBackups value="1000" />
<!--最大文件大小-->
<maximumFileSize value="10MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger - %message%newline" />
</layout>
</appender>
其中ERROR是日志类别的一种,其余四种不再单独列出,配置类似。将日志分门别类,便于查找需要的文件及时排查错误原因。
3. 在<log4net>节点下增加<root>子节点,每个< root >子节点代表启用记录日志的方式。
<root>
<level value="ALL" />
<appender-ref ref="errorAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="debugAppender" />
</root>
其中ALL表示全部启用,OFF表示全部禁用,其余表示启用相应的日志记录。
4. 在<log4net>节点下增加<logger>子节点,每个< logger >子节点代表某个模块启用记录日志的方式,可以避免日志过快增长,但会影响读写性能,可以结合实际情况适当选用。配置文件格式同<root>节点。
5.在web应用程序的全局配置文件的Application_Start事件中,添加如下代码:
XmlConfigurator.Configure();
在需要记录日志的地方调用如下代码:
ILog log = LogManager.GetLogger("Test");
log.Error("ERROR");
不同的日志类别调用不同的方法,可以把异常信息也传入到日志文件中以便于查找问题与排除故障。其中创建日志记录组建实例也可以使用下面的代码,将更加方便。
ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
相关参数简写附注:
%m:输出的日志消息
%n:换行
%d:输出当前语句运行的时刻
%r:输出程序从运行到执行到当前语句时消耗的毫秒数
%t:当前语句所在的线程ID
%p:日志的当前优先级别
%c:当前日志对象的名称
%l:输出语句所在的行号
%f:输出语句所在的文件名
%-数字—表示该项的最小长度,若不够则用空格填充
附详细配置文件具体说明,由于配置文件过长而将类似配置节部分省略,这些配置节不一定要同时使用甚至有些配置节是互斥的,应该根据实际情况适当选择配置节:
<configuration> <configSections > <section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!-- 根日志对象--> <root> <!-- 默认为DEBUG,主要有ALL、FATAL、ERROR、WARN、INFO、DEBUG、OFF七种,可以不配置--> <level value="DEBUG"/> <!-- 文件形式记录FATAL(致命错误)日志--> <appender-ref ref="fatalRollingFileAppender" /> <!-- 文件形式记录ERROR(一般错误)日志--> <appender-ref ref="errorRollingFileAppender" /> <!-- 文件形式记录WARN(警告)日志--> <appender-ref ref="warnRollingFileAppender" /> <!-- 文件形式记录INFO(一般信息)日志--> <appender-ref ref="infoRollingFileAppender" /> <!-- 文件形式记录DEBUG(调试信息)日志--> <appender-ref ref="debugRollingFileAppender" /> <!-- 数据库形式记录FATAL(致命错误)日志(MSSQL)--> <appender-ref ref="fatalAdoNetAppender" /> <!-- 数据库形式记录ERROR(一般错误)日志(MSSQL)--> <appender-ref ref="errorAdoNetAppender" /> <!-- 数据库形式记录WARN(警告)日志(MSSQL)--> <appender-ref ref="warnAdoNetAppender" /> <!-- 数据库形式记录INFO(一般信息)日志(MSSQL)--> <appender-ref ref="infoAdoNetAppender" /> <!-- 数据库形式记录DEBUG(调试信息)日志(MSSQL)--> <appender-ref ref="debugAdoNetAppender" /> </root> <!-- 子日志对象,可以不配置--> <logger name="Test" additivity="false"> <level value="ALL"/> <!-- additivity默认值为true,表示继承根日志对象--> <appender-ref ref="AdoNetAppender" additivity="false"/> </logger> <!-- 定义输出到文件中--> <appender name="fatalRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <!-- 旧日志文件自动重命名并生成新日志文件--> <preserveLogFileNameExtension value="true" /> <!-- 日志的路径--> <file value="Logs\fatal.log"/> <!-- 是否覆盖,默认是追加true--> <appendToFile value="true"/> <!-- 混合使用日期和文件大小变换日志文件名,rollingStyle的值共有Once、Size、Date、Composite四种--> <rollingStyle value="Composite"/> <!-- 日期的格式--> <datePattern value="yyyyMMddHHmm" /> <!-- 最大变换数量--> <maxSizeRollBackups value="1000"/> <!-- 最大文件大小--> <maximumFileSize value="100KB"/> <!-- 名称是否可以更改,false为可以更改--> <staticLogFileName value="true"/> <layout type="log4net.Layout.PatternLayout"> <!-- 日志会话开始输出的文字--> <header value="开始"/> <!-- 日志会话输出的详细信息--> <conversionPattern value="%n记录时间:%d 线程ID:[%t] 日志级别:%-5p 出错类:%c property:[%property{NDC}] - 错误描述:%m%n"/> <!-- 日志会话结束输出的文字--> <footer value="结束"/> </layout> <!-- 过滤指定级别之间的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="DEBUG"/> <levelMax value="FATAL"/> </filter> <!-- 过滤指定级别的日志--> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL" /> </filter> </appender> </log4net> </configuration> 配置文件