log4net日志的配置及简单应用

11/25/2015来源:ASP.NET技巧人气:866

在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率。而本菜鸟在大神推荐和指导下使用log4net这一插件工具,其中也学到了一些皮毛,所谓好记性不如烂笔头嘛。为此,将把这些心得体会记录下来,以免遗忘。同时,也为各位童鞋提供一些参考。在此声明,本文粗浅之极,大神莫入。

 

对于log4net有什么功能,这里就不赘述了。直接进入本文重点,也就是log4net的配置和简单使用。

首先,项目要引入log4net.dll。

 

然后,为项目增加配置文件——log4net.config

 

<log4net>
<!--日志配置,按日期保存-->
  <appender name="DefaultLog" type="log4net.Appender.RollingFileAppender">
    <file value="LogFiles\" />
    <threshold value="WARN" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="30MB" />
    <rollingStyle value="Composite" />
    <datePattern value='yyyy-MM-dd".log"' />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="-----------程序开始运行-----------
" />
      <footer value="-----------程序结束运行-----------

" />
      <conversionPattern value="%date [%thread] %-5level %logger - %message%n" />
    </layout>
  </appender>

  <!--日志配置,按日期保存-->
  <appender name="BaseLog" type="log4net.Appender.RollingFileAppender">
    <file value="LogFiles\" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="30MB" />
    <rollingStyle value="Composite" />
    <datePattern value='yyyy-MM-dd".log"' />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="-----------程序开始运行-----------
" />
      <footer value="-----------程序结束运行-----------

" />
      <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
  </appender>

  <!--控制台日志配置,按日期保存-->
  <appender name="ConsoleLog" type="log4net.Appender.RollingFileAppender">
    <file value="LogFiles\" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="30MB" />
    <rollingStyle value="Composite" />
    <datePattern value='yyyy-MM-dd".log"' />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="-----------程序开始运行-----------
" />
      <footer value="-----------程序结束运行-----------

" />
      <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
  </appender>

  <!--窗体日志配置,按日期保存-->
  <appender name="FromLog" type="log4net.Appender.RollingFileAppender">
    <file value="LogFiles\" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="30MB" />
    <rollingStyle value="Composite" />
    <datePattern value='yyyy-MM-dd".log"' />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="-----------程序开始运行-----------
" />
      <footer value="-----------程序结束运行-----------

" />
      <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
  </appender>

  <!-- 根级别,作为默认值 -->
  <root>
    <!--
        OFF   - 不输出任何日志
        FATAL - 仅输异常
        ERROR - 输出错误/异常信息
        WARN  - 输出警告/错误/异常信息
        INFO  - 输出普通/警告/错误/异常信息,默认
        DEBUG - 输出调试/普通/警告/错误/异常信息
        ALL   - 与DEBUG相同
    -->
    <level value="WARN" />
    <!--如果找不到对应的logger,会自动使用这个默认的日志-->
    <appender-ref ref="DefaultLog" />
  </root>
  <logger name="MyLog.Base.Log">
    <level value="DEBUG" />
    <appender-ref ref="BaseLog" />
  </logger>
  <logger name="MyLog.Base.Console">
    <level value="DEBUG" />
    <appender-ref ref="ConsoleLog" />
  </logger>
  
  <logger name="MyLog.Base.Form">
    <level value="DEBUG" />
    <appender-ref ref="FromLog" />
  </logger>
</log4net>

 

 

在此,简单解释上面配置文件的使用,首先是<appender/>和<logger/>节点必须成对,每对配置,就是一个日志输出的配置。<appender-ref ref="BaseLog" />中属性ref的值对应<appender>的属性name的值。而<layout/>中的信息为日志输出的格式信息。其他的,就不一一解释了。

配置文件完成以后,为了让log4跑起来,还需要添加一个调用类——Logger。

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;

namespace Base
{
    public  class Loggers
    {
        public static readonly ILog FormLogger = LogManager.GetLogger("MyLog.Base.Form");

        public static readonly ILog ConsoleLogger = LogManager.GetLogger("MyLog.Base.Console");

        public static readonly ILog BaseLogger = LogManager.GetLogger("MyLog.Base.Log");
    }
}



 

 

值得注意的是,上面类中GetLogger("MyLog.Base.Log")中“MyLog.Base.Log”必须和配置文件中<loggger name="MyLog.Base.Log">的name属性值保持一致。
之后,为了让log4net跑起来,还需要添加代码来加载log4net配置文件,根据大神的传授,有两种加载方法:

 

 

1、在程序文件AssemblyInfo.cs中加上

[assembly: log4net.Config.xmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

 

2、在程序load事件中加上

 //读取log4net配置文件  
            log4net.Config.XmlConfigurator.Configure(new Uri(AppDomain.CurrentDomain.SetupInformation.applicationBase + "log4net.config"));

 

P.S:方法一我没有实现成功,可能是因为某些问题我没有发现,哪位童鞋知道原因可以告知我一下。不过方法二的使用成功了。

最后就是写入信息到文件的问题了,其实就一句代码:

 

 

Loggers.BaseLogger.Debug("Run Start");

 

 

同时,我们还可以根据日志输出的级别来选取输出的方法,日志的输出级别如下:

        OFF   - 不输出任何日志
        FATAL - 仅输异常
        ERROR - 输出错误/异常信息
        WARN  - 输出警告/错误/异常信息
        INFO  - 输出普通/警告/错误/异常信息,默认
        DEBUG - 输出调试/普通/警告/错误/异常信息
        ALL   - 与DEBUG相同

 

本文完。

附注:log4net下载地址:点击打开链接