学习在Web中使用log4net

来源:互联网 发布:淘宝掌柜名可以改吗 编辑:程序博客网 时间:2024/05/22 22:42

由于打算在近期的项目量使用log4net,于是上网搜了一堆相关文档,自己动手写示例时却发现运行结果总是与网上的不尽相同,主要在如下二点:

1.配置文件的读取

   在项目的AssemblyInfo.cs文件里添加以下的语句

   [assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",Watch=true/false)]

   filename的值是配置文件的路径,Watch的值表示是否实时反映配置文件的修改。

   或者动态加载

   DOMConfigurator.[Configure/ConfigureAndWatch](new FileInfo("filename"));

   Configure/ConfigureAndWatch的区别在于是否实时反映配置文件的修改。

    在2.0及以后推荐将"DOMConfigurator"改为"XmlConfigurator",但是2.0及以后的Web项目是没有"AssemblyInfo.cs"文件的,总不能在每个需要使用log4net的类中都加上面那二行代码。针对这种情况,网上也有二种解决办法:(1)新建类库继承log4,用 [assembly]方式加载配置,Web项目再引用类库;(2)在Global文件中动态加载配置。个人认为log4net提供的方法已经鸲用了,没有必要再去继承,推荐使用第(2)种。

2.多种Appender的使用

   网上有类似这样的配置

log4net.config

<log4net> 
     <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > 
         <param name="File" value="XxxxApplication.log.txt" /> 
         <param name="datePattern" value="MM-dd HH:mm" /> 
         <param name="AppendToFile" value="true" /> 
         <layout type="log4net.Layout.PatternLayout"> 
             <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> 
         </layout> 
     </appender> 
     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
         <param name="File" type="" value="log" />
    <param name="AppendToFile" value="true" />
    <param name="RollingStyle" value="Date" />
    <param name="DatePattern" value="yyyyMMdd" />
    <param name="StaticLogFileName" value="false" />
    <layout type="log4net.Layout.PatternLayout,log4net">
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    </layout>
     </appender> 
     <root> 
         <level value="DEBUG" /> 
         <appender-ref ref="LogFileAppender" /> 
<appender-ref ref="RollingLogFileAppender" /> 
     </root> 
</log4net>

*.cs

Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");

log.Debug("message");

上面的执行结果是二种Appender定义的日志文件中都出现了一行日志。

应该在配置文件应该为每一种介质都用<logger>标签定义一个名字。

修改后的文件如下:

log4net.config(不需要在web.config中作任何关于log4net的配置)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
   <root>
    <level value="INFO" />
   </root>
   <logger name="AA">
    <appender-ref   ref="LogRollingFile"   />
   </logger>
   <logger name="BB">
    <appender-ref   ref="LogFile"   />
   </logger>
   <logger name="CC">
    <appender-ref   ref="LogFile1"   />
   </logger>
   <appender name="LogFile" type="log4net.Appender.FileAppender" >
    <param name="File" value="log-file.txt" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] /r"/>
    </layout>
   </appender>
   <appender name="LogFile1" type="log4net.Appender.FileAppender" >
    <param name="File" value="log-file1.txt" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] /r"/>
    </layout>
   </appender>
   <appender name="LogRollingFile" type="log4net.Appender.RollingFileAppender" >
    <param name="File" type="" value="log" />
    <param name="AppendToFile" value="true" />
    <param name="RollingStyle" value="Date" />
    <param name="DatePattern" value="yyyyMMdd" />
    <param name="StaticLogFileName" value="false" />
    <layout type="log4net.Layout.PatternLayout,log4net">
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
     <param name="Header" value="----------------------header--------------------------/r/n" />
     <param name="Footer" value="----------------------footer--------------------------/r/n" />
    </layout>
   </appender>
</log4net>
</configuration>

Global.asax

void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        System.IO.FileInfo infoF = new System.IO.FileInfo("配置文件的实际路径");
        log4net.Config.XmlConfigurator.ConfigureAndWatch(infoF);//使用ConfigureAndWatch
    }

*.cs

protected void FileAppender_Click(object sender, EventArgs e)
    {
        log4net.ILog logger = log4net.LogManager.GetLogger("BB");
        logger.Info("...LogFile...");
    }
    protected void FileAppender1_Click(object sender, EventArgs e)
    {
        log4net.ILog logger = log4net.LogManager.GetLogger("CC");
        logger.Info("...LogFile...");
    }
    protected void RollingFileAppender_Click(object sender, EventArgs e)
    {
        log4net.ILog logger = log4net.LogManager.GetLogger("AA");
        logger.Info("...LogRollingFile...");
    }

原创粉丝点击