log4net应用

1.写配置文件。

log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <!--所有logger的基,root的设置在所有logger中都起作用。 
        当在root和logger中重复设定相同的appender时,你会发现同一日志信息将被记录两次。-->
    <!--<root> 
            <level value="ALL"/> 
            <appender-ref ref="FileAppender"/> 
            <appender-ref ref="ConsoleAppender"/> 
        </root>-->
    
    <logger name="logger">
      <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="INFO" />
      <appender-ref ref="FileAppender"></appender-ref>
    </logger>


    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <!--路径-->
      <!--<file value="\\log.txt"></file>-->
      
      <!--路径,在项目的根目录下-->
      <!--以最后一个路径为准-->
      <file value="./Log/log.txt"></file>
      
      <!--防止多线程时不能写Log,线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      
      <appendToFile value="true" />
      
      <!--可以为:Once|Size|Date|Composite-->
      <!--Composite为Size和Date的组合-->
      <rollingStyle value="composite" />
      
      <!--日志最大个数,都是最新的-->
      <!--rollingStyle节点为Date时,该节点不起作用-->
      <!--rollingStyle节点为Size时,只能有value个日志-->
      <!--rollingStyle节点为Composite时,每天有value个日志-->
      <maxSizeRollBackups value="10" />
      
      <!--当备份文件时,为文件名加的后缀-->
      <datePattern value="_yyyy-MM-dd.txt" />
      
      <!--可用的单位:KB|MB|GB-->
      <!--不要使用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1024KB" />
      
      <!--置为true,当前最新日志文件名永远为file节中的名字-->
      <staticLogFileName value="true" />
      
      <!--输出级别在INFO和ERROR之间的日志-->
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="ERROR" />
      </filter>
      
      <!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
      <!--<filter type="log4net.Filter.LevelMatchFilter">
        <param name="LevelToMatch" value="WARN" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />-->

      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="
          %n异常时间:%d [%t]  
          %n异常级别:%-5p
          %n异 常 类:%c [%x]
          %n文 件 名:%F
          %n行    号:%L
          %n异常信息:%m 
          %n " />
      </layout>
    </appender>
  </log4net>


  <!--==================layout节点的配置说明======================-->
  <!--        %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息                          -->
  <!--        %n(new line):换行                                                                   -->
  <!--        %d(datetime):输出当前语句运行的时刻                                                 -->
  <!--        %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数                           -->
  <!--        %t(thread id):当前语句所在的线程ID                                                  -->
  <!--        %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等                           -->
  <!--        %c(class):当前日志对象的名称,例如:                                                -->
  <!--               模式字符串为:%-10c -%m%n                                                    -->
  <!--               代码为:                                                                     -->
  <!--        ILog log=LogManager.GetLogger(“Exam.Log”);                                        -->
  <!--        log.Debug(“Hello”);                                                               -->
  <!--            则输出为下面的形式:                                                            -->
  <!--        Exam.Log       - Hello                                                              -->
  <!--        %L:输出语句所在的行号                                                              -->
  <!--        %F:输出语句所在的文件名                                                            -->
  <!--        %-数字:表示该项的最小长度,如果不够,则用空格填充                                  -->
  <!--        例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: -->
  <!--        176 [main] INFO org.foo.Bar - Located nearest gas station.                         -->
  <!--                                                                                        -->
  <!--=========================================================-->

</configuration>


2.添加引用(废话)

3.winform调用组件方法。

  在AssemblyInfo.cs文件中添加

  a.如果log4net的配置直接写在app.config里面的话添加

  [assembly: log4net.Config.XmlConfigurator(Watch=true)]

  b.如果log4net的配置单独写在一个文件中,则添加

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

4.web调用组件方法
  在Global.aspx.cs文件中的Application_Start方法中添加

  a.如果log4net的配置直接写在web.config里面的话添加

  log4net.Config.XmlConfigurator.Configure();

  b.如果log4net的配置单独写在一个文件中,则添加

  log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("log4net.config")));

5.调用记录日志方法

WriteLog
static log4net.ILog log = log4net.LogManager.GetLogger("logger");
        public static void WriteLog(string message)
        {
            log.Info(message);
            //log.Warn(message);
            //log.Error(message);
            //...
        }

 6.测试效果。

a.winform

异常时间:2013-01-18 16:30:13,475 [1]            
异常级别:ERROR          
异 常 类:logger [(null)]          
文 件 名:d:\Visual Studio Project\TestLog4Net\TestLog4Net\Form1.cs          
行    号:25          
异常信息:输入字符串的格式不正确。

 

b.web

异常时间:2013-01-18 16:44:02,527 [8]            
异常级别:INFO           
异 常 类:logger [(null)]          
文 件 名:d:\Visual Studio Project\TestLog4Net\WebLog4NetTest\Default.aspx.cs          
行    号:26          
异常信息:输入字符串的格式不正确。

7.测试发现一个问题。

在winform中,行号记录的是实际发生错误的行。

在web中,行号记录的是记录错误代码的行。

不知道是什么原因。。。。

posted @ 2013-01-18 17:08  stone87654321  阅读(229)  评论(0编辑  收藏  举报