Log4Net 使用(转)

from  Amen:http://www.cnblogs.com/ucetgg/archive/2009/01/20/log4net.html
1.介绍
Log4net 是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j(可惜.net下怎么就没有这样优秀的软件首先出现呢,都要从j那边 “引进”)。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。
官方网站:http://logging.apache.org/log4net/
下载:http://logging.apache.org/log4net/download.html开源
下载包里包括.net 1.0/1.1/2.0等版本和各种平台下的DEMO
官方SDK:http://logging.apache.org/log4net/release/sdk/index.html
2.使用
   2.1引入log4net.dll组件
   2.2建立一个配置文件
两种方法,一种是在Web.Config或App.Config里
加入以下配置节


<configSections> 
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
</configSections> 

上面的配置节,复制就可以用了加入log4net配置内容的定义,这个紧接着上面的内容定义在config文件里就可以了,下面是一个范例:

 


<!--日志配置部分--> 
  
<configSections> 
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
  
</configSections> 
  
<log4net> 
    
<!--写入到操作系统--> 
    
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
      
<layout type="log4net.Layout.PatternLayout"> 
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
      
</layout> 
    
</appender> 
     
    
<!--写入到文件 --> 
    
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
      
<!--<file value="log\log.txt"/>--> 
      
<!--<file name="Client.Logging" value="log\log" />--> 
      
<file value="Log\log" /> 
      
<!--是否覆盖--> 
      
<appendToFile value="true"/> 
      
<!--设置无限备份=-1 ,最大备份数为1000--> 
      
<maxSizeRollBackups value="1000"/> 
      
<!--每个文件的最大20k--> 
      
<maximumFileSize value="20"/> 
      
<!--名称是否可以更改 为false为可以更改--> 
      
<param name="StaticLogFileName" value="false" /> 
      
<!--文件名称--> 
      
<param name="DatePattern" value="yyyyMMdd".txt"" /> 
      
<param name="RollingStyle" value="Composite" /> 
      
<!--<param name="RollingStyle" value="Composite" />--> 
      
<layout type="log4net.Layout.PatternLayout"> 
        
<param name="ConversionPattern" value="%d [%r] [%t] %p %c  - %m%n%n" /> 
      
</layout> 
    
</appender> 
   
    
<!--写入到文件,是累加,不生成新的文件--> 
    
<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
      
<file value="log\log-file.txt" /> 
      
<appendToFile value="false" /> 
      
<layout type="log4net.Layout.PatternLayout"> 
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
      
</layout> 
    
</appender> 

    
<!--写入到数据库--> 
    
<appender name="ADONetAppender_SqlServer" type="log4net.Appender.AdoNetAppender"> 
      
<!--<bufferSize value="10" />--> 
      
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
      
<connectionString value="Server=10.88.**.**;UID=sa;PWD=******;DataBase=Inquiry;Max Pool Size=1000"/> 
      
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/> 
      
<parameter> 
        
<parameterName value="@log_date"/> 
        
<dbType value="DateTime"/> 
         
                
<layout type="log4net.Layout.PatternLayout"> 
                    
<conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" /> 
                
</layout> 
        
<!-- <layout type="log4net.Layout.RawTimeStampLayout"/>--> 
      
</parameter> 
      
<parameter> 
        
<parameterName value="@thread"/> 
        
<dbType value="String"/> 
        
<size value="255"/> 
        
<layout type="log4net.Layout.PatternLayout"> 
          
<conversionPattern value="%thread"/> 
        
</layout> 
      
</parameter> 
      
<parameter> 
        
<parameterName value="@log_level"/> 
        
<dbType value="String"/> 
        
<size value="50"/> 
        
<layout type="log4net.Layout.PatternLayout"> 
          
<conversionPattern value="%level"/> 
        
</layout> 
      
</parameter> 
      
<parameter> 
        
<parameterName value="@logger"/> 
        
<dbType value="String"/> 
        
<size value="255"/> 
        
<layout type="log4net.Layout.PatternLayout"> 
          
<conversionPattern value="%logger"/> 
        
</layout> 
      
</parameter> 
      
<parameter> 
        
<parameterName value="@message"/> 
        
<dbType value="String"/> 
        
<size value="4000"/> 
        
<layout type="log4net.Layout.PatternLayout"> 
          
<conversionPattern value="%message"/> 
        
</layout> 
      
</parameter> 
    
</appender> 
    
<!-- 发送邮件--> 
    
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
      
<authentication value="Basic" /> 
      
<to value="fengsheng@cnpcag.com" /> 
      
<from value="fengsheng@cnpcag.com" /> 
      
<username value="Feng Sheng" /> 
      
<password value="******" /> 
      
<subject value="test logging message" /> 
      
<smtpHost value="mail.cnpcag.com" /> 
      
<bufferSize value="512" /> 
      
<lossy value="true" /> 
      
<evaluator type="log4net.Core.LevelEvaluator"> 
        
<threshold value="ALL"/> 
      
</evaluator> 
      
<layout type="log4net.Layout.PatternLayout"> 
        
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> 
      
</layout> 
    
</appender> 
     
    
<root> 
      
<level value="ALL"/> 
      
<appender-ref ref="ADONetAppender_SqlServer"/> 
      
<appender-ref ref="SmtpAppender"/> 
      
<!-- <appender-ref ref="RollingLogFileAppender"/> 
      <appender-ref ref="EventLogAppender"></appender-ref> 
      <appender-ref ref="AdoNetAppender_Access"></appender-ref> 
      <appender-ref ref="ColoredConsoleAppender"></appender-ref> 
      <appender-ref ref="FileAppender"></appender-ref> 
--> 
    
</root> 
    
<!-- Specify the level for some specific categories --> 
    
<logger name="ADONetAppender_SqlServer"> 
      
<!-- <appender-ref ref="B" /> --> 
      
<level value="ALL"/> 
      
<appender-ref ref="ADONetAppender_SqlServer"/> 
      
<appender-ref ref="RollingLogFileAppender"/> 
    
</logger> 
     
  
</log4net> 

   2.3 关联配置文件
当我们创建了上面的配置文件后,我们接下来需要把它和我们的应用联系起来。缺省的,每个独立的可执行程序集都会定义它自己的配置。log4net框架使用 log4net.Config.DOMConfiguratorAttribute在程序集的级别上定义配置文件。
例如:可以在项目的AssemblyInfo.cs文件里添加以下的语句
[assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",
  ConfigFileExtension="ext",Watch=true/false)]
l         ConfigFile:[/B]指出了我们的配置文件的路径及文件名,包括扩展名。
l         ConfigFileExtension:[/B]如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。
l         Watch (Boolean[/B]属性):[/B] log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。
其中:ConfigFile和ConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config.txt”
ConfigFileExtension则是指明了和可执行程序集同名的配置文件的扩展名,例如,应用程序的名称是”test.exe”,ConfigFileExtension=”txt”,则配置文件就应该是”test.exe.txt” ;
对于Web网站 可以在Global.asax 配置如下:


void Application_Start(object sender, EventArgs e) 
    { 
        
// 在应用程序启动时运行的代码 
        log4net.Config.XmlConfigurator.Configure(); 

另外,也可以将log4net再包装成类库,在类库的Assembly.cs文件中加入配置文件的定义[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"logn4net.config", Watch = true)]


2.4 测试 
    


protected void Button1_Click(object sender, EventArgs e) 
    { 
       
        log4net.ILog log 
= log4net.LogManager.GetLogger("ADONetAppender_SqlServer"); 
        log.Info(
"hello world!"); 
    } 
    
protected void Button2_Click(object sender, EventArgs e) 
    { 
        log4net.ILog log 
= log4net.LogManager.GetLogger("ADONetAppender_SqlServer"); 
        log.Debug(
"hello world!"); 
    } 

3.说明:
  关键在于配置,弄清楚了2.2中的配置以后,对于使用就没有任何问题了。
  这个东西的强大是有很多中记录日志的方式,在我给出的配置文件里 写出了好几种记录输出方式,经过我亲自测试,都是可以使用的。其实还有很多记录输出方式(参见http://www.cnblogs.com/shyblog/archive/2008/11/18/1336052.html),感觉很少会用到,我这里就没有提到了。
个人推崇的三种记录日志方式:
(1)数据库记录(如果不影响系统性能,此为首选,方便查询与统计)
(2)windows 事件日志 (这个使我感到它的强大)
(3)电子邮件
其实在实际过程中可以筛选,或者多种输出方式交替使用,比如 所有类型的日志都记录到数据库,等级在WARN以上的日志记录到windows或者文本中,ERROR类型以上的的发送到管理员邮箱。
4.其他:
   其实还有很多配置和使用我没有了解清楚,这个还有待以后具体了解。
   同时我还碰到几个问题
(1)日志记录近数据库时,感觉有较长的延时(慢5分钟左右,数据库为SQL Server 2000),不知为何
(2)若用多种方式,或者仅用一种方式输出日志时,对系统性能是否有较大影响
(3)应用系统出了关键错误时,那个时候log4net是不是根本就没发发挥作用了,因为系统挂掉了~
5.参考文章(排名部分先后):
(1)Log4Net使用指南 http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
(2)解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender) http://www.cnblogs.com/jacktu/archive/2007/12/05/984487.html
(3).NET开源项目介绍及资源推荐:日志记录  http://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html
(4)Log4Net五步走 http://heroman.cnblogs.com/archive/2006/01/09/314053.html
(5)Log4Net 开发文档 http://www.cnblogs.com/macroxu-1982/archive/2008/12/04/1347407.html
(6)Log4net学习笔记  http://www.cnblogs.com/agtaimaer/archive/2008/11/15/log4net.html
(7)DEMO下载 https://files.cnblogs.com/agtaimaer/Log4netDemo.rar

//****************************************
  by: Amen cnblogs博客  转载请注明出处
//****************************************
Tag标签: log4net 介绍

posted on 2009-07-07 19:19  LongSky  阅读(685)  评论(1编辑  收藏  举报

导航