log4net使用详解

    log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。

 

一、log4的使用方法:

log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测
有两种配置方式:一种程序配置,一种文件配置
有三个主要单元要了解,Logger,appender,layout. 

logger是进行记录的主要类,appender是记录的方式,layout是记录的格式

Logger 是日志记录器,我们使用其相关方法来完成日志记录;Appender 用于设置日志的存储方式和位置,Logger 的配置中会绑定一个或多个 Appender;Layout 关联具体的 Appender,用于设置日志字符串的格式。logger七种日志级别:debug,info,warn,error,fatal,all,off
最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用

appender主要分三类,终端输出,文件输出,流输出
ConsoleAppender
FileAppender
WriterAppender

layout也分三类:简单格式,html格式,匹配格式
SimpleLayout
HTMLLayout
PatternLayout

输出简写:(用在PatternLayout)
%m 输出代码中指定的消息
%p 输出优先级
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。一般使用了它就不需使用%c了

 

首先粘贴一个比较全的配置实例(App.config)如下:

 



 
   


 
  
 
 
   
   
     
     
     
     
     
     

     
       
       
       
       
       
     

   
   
   
     
       
       
       
     

     
       
       
     

     
       
     

   
   
   
     
       
     

   

   
   
     
     
     
       
       
       
       
         
       

     

     
       
       
       
       
         
       

     

     
       
       
       
       
         
       

     

     
       
       
       
       
         
       

     

     
       
       
       
       
         
       

     

   

   
   
     
       
     

   

   
   
     
     
     
     
     
     
     
       
     

   

   
   
     
     
     
   

   
   
     
     
     
   


   
     
     
     
      
    
   

 
 

 

然后,找的一些讲解,网址:http://www.rainsts.net/article.asp?id=488

 

1. Logger

所有的记录器都必须实现 ILog 接口,该接口提供日志记录所需的大量方法。

public interface ILog : ILoggerWrapper
{
    void Debug(...);
    void Error(...);
    void Fatal(...);
    void Info(...);
    void Warn(...);

    bool IsDebugEnabled { get; }
    bool IsErrorEnabled { get; }
    bool IsFatalEnabled { get; }
    bool IsInfoEnabled { get; }
    bool IsWarnEnabled { get; }
}


通常情况下,我们通过 LogManager.GetLogger() 来获取一个记录器。LogManager 内部维护一个 hashtable,保存新创建 Logger 引用,下次需要时直接从 hashtable 获取其实例。

ILog log = LogManager.GetLogger(this.GetType());
log.Debug("aaaaaaaaaaaaaaa");


所有 Logger 的参数设置都直接或间接继承自 root,其继承关系类似 namespace。比如,名为 "MyLogger.X.Y" 参数设置继承自 "MyLogger.X"。当我们创建 "MyLooger.X.Y" 记录器时,会在配置文件找该名称的记录器设置,如果没找到,则按继承关系向上查找,直到 root。因此,在创建 Logger 时,我们通常使用类型名称做为记录器的名字,缺省情况下,它会使用 root 或某一个父配置,但在需要的时候,我们随时可以为具体的类型添加一个更加 "详细" 的配置。

 

    
        
            
        
    

    
        
    

    
        
        
    



在创建 Logger 设置时,需要注意 "level" 参数。Log4net 允许我们通过该参数调整日志记录级别,只有高于或等于该级别的日志才会被记录下来。比如在代码调试阶段,我们可能希望记录所有的信息,而在部署阶段,我们只希望记录级别更高的错误信息。这个参数的好处是允许我们在不修改代码的前提下,随时调整记录级别。

(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)


"appender-ref" 参数用于绑定一个或多个具体的 Appender。



    
    

    
    

    
        
        
        
    


2. Appender / Layout

Log4net 提供了大量的 Appender,最常用的包括 AdoNetAppender、AspNetTraceAppender、ConsoleAppender、FileAppender、OutputDebugStringAppender。每种 Appender 都有特定一些参数,使用时直接从 《Log4net 手册》的示例中拷贝过去,就OK了。(代码摘自 Log4net 手册)

(1) AspNetTraceAppender


    
        
    


(2) ConsoleAppender


    
        
    


(3) OutputDebugStringAppender


    
        
    


(4) FileAppender


    
    
    
        
    


有关 Layout 详细信息,请参考 Log4net 相关文档,本文不做详述。

 

3. Configuration

Log4net 的配置方式十分灵活,即可以写到应用程序配置文件中,也可以使用独立配置文件。同时它还提供了监测配置文件变化的功能,这样我们随时可以调整配置,而无须重启应用程序。

(1) 使用 app.config / web.config

app.config / web.config



    
        


使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure();


(2) 使用自定义配置文件

test.log4net

 

    
        
            
        
    
    
    
        
        
    


使用代码初始化配置。

log4net.Config.XmlConfigurator.Configure(new FileInfo("test.log4net"));


使用 XmlConfigurator.ConfigureAndWatch() 方法除了初始化配置外,还会监测配置文件的变化,一旦发生修改,将自动刷新配置。

(3) XmlConfiguratorAttribute

我们还可以使用 XmlConfiguratorAttribute 代替 XmlConfigurator.Config()/ConfigureAndWatch(),ConfiguratorAttribute 用于定义与 Assembly 相关联的配置文件名。

方式1: 关联到 test.log4net,并监测变化。

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


方式2: 关联到 test.exe.log4net (或 test.dll.log4net,文件名前缀为当前程序集名称),并监测变化。

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch=true)]
备注:

    若不用关联到相关配置文件,简单的形式:[assembly: log4net.Config.XmlConfigurator(Watch = true)]

 

    程序主要代码:

           //创建日志记录组件实例
            ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

            // private static ILog _log = LogManager.GetLogger(typeof(DeviceFactory));

           
            //记录错误日志
            log.Error(String.Format(""),new Exception("发生了一个异常"));
            //记录严重错误
            log.Fatal("fatal",new Exception("发生了一个致命错误"));
            //记录一般信息
            log.Info("info");
            //记录调试信息
            log.Debug("debug");
            //记录警告信息
            log.Warn("warn");

 

    记录日志操作前最好添加类似下面的判断代码,提高性能:

     if (log.IsWarnEnabled)

     {

         //logger code

     }

你可能感兴趣的:(log4net,newline,layout,thread,assembly,encoding)