日志组件log4net学习总结

gcmc 10年前

记录的日志类别主要有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>    配置文件