log4net使用詳解

說明:本程序演示如何利用log4net記錄程序日誌信息。log4net是一個功能著名的開源日誌記錄組件。利用log4net能夠方便地將日誌信息記錄到文件、控制檯、Windows事件日誌和數據庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。而且咱們還能夠記載控制要記載的日誌級別,能夠記載的日誌類別包括:FATAL(致命錯誤)、ERROR(通常錯誤)、WARN(警告)、INFO(通常信息)、DEBUG(調試信息)。要想獲取最新版本的log4net組件庫,能夠到官方網站http://logging.apache.org/log4net/下載。如今的最新版本是1.2.10。web

下面的例子展現瞭如何利用log4net記錄日誌 。數據庫

首先從官方網站下載最近版本的log4net組件,如今的最新版本是1.2.10。在程序中咱們只須要log4net.dll文件就好了,添加對log4net.dll的引用,就能夠在程序中使用了。apache

接着咱們配置相關的配置文件(WinForm對應的是*.exe.config,WebForm對應的是*.config),本實例中是控制檯應用程序,配置以下(附各配置的說明):windows

<? xml version="1.0" encoding="utf-8"  ?>
< configuration >
   < configSections >   
   < section  name ="log4net"  type ="System.Configuration.IgnoreSectionHandler" />
   </ configSections >  
  < appSettings >   
</ appSettings >
   < log4net >  
    <!-- 定義輸出到文件中 -->  
    < appender  name ="LogFileAppender"  type ="log4net.Appender.FileAppender" >  
      <!-- 定義文件存放位置 -->        < file  value ="D:/log4netfile.txt"   />        < appendToFile  value ="true"   />        < rollingStyle  value ="Date"   />     
   < datePattern  value ="yyyyMMdd-HH:mm:ss"   />  
      < layout  type ="log4net.Layout.PatternLayout" >   
       <!-- 每條日誌末尾的文字說明 -->      
    < footer  value ="by 周公"   />        
  <!-- 輸出格式 -->          <!-- 樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info -->          < conversionPattern  value ="記錄時間:%date 線程ID:[%thread] 日誌級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline"   />    
    </ layout >   
   </ appender >   
   <!-- 定義輸出到控制檯命令行中 -->  
    < appender  name ="ConsoleAppender"  type ="log4net.Appender.ConsoleAppender" >   
     < layout  type ="log4net.Layout.PatternLayout" >      
    < conversionPattern  value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"   />      
  </ layout >     
</ appender >  
    <!-- 定義輸出到windows事件中 -->  
    < appender  name ="EventLogAppender"  type ="log4net.Appender.EventLogAppender" >    
    < layout  type ="log4net.Layout.PatternLayout" >      
    < conversionPattern  value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"   /> </ layout >  
 
    </ appender >  
    <!-- 定義輸出到數據庫中,這裏舉例輸出到Access數據庫中,數據庫爲C盤的log4net.mdb -->    
  < appender  name ="AdoNetAppender_Access"  type ="log4net.Appender.AdoNetAppender" >     
   < connectionString  value ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb"   />     
   < commandText  value ="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)"   />        <!-- 定義各個參數 -->     
   < parameter >     
     < parameterName  value ="@logDate"   />        
  < dbType  value ="String"   />      
    < size  value ="240"   />    
      < layout  type ="log4net.Layout.PatternLayout" >       
     < conversionPattern  value ="%date"   />    
      </ layout >    
    </ parameter >     
   < parameter >      
    < parameterName  value ="@thread"   />     
     < dbType  value ="String"   />      
    < size  value ="240"   />  
        < layout  type ="log4net.Layout.PatternLayout" >   
         < conversionPattern  value ="%thread"   />    
      </ layout >        </ parameter >   
     < parameter >     
     < parameterName  value ="@logLevel"   />  
        < dbType  value ="String"   />
         < size  value ="240"   />       
   < layout  type ="log4net.Layout.PatternLayout" >     
       < conversionPattern  value ="%level"   />      
    </ layout >     
   </ parameter >   
     < parameter >       
   < parameterName  value ="@logger"   />      
    < dbType  value ="String"   />     
     < size  value ="240"   />    
      < layout  type ="log4net.Layout.PatternLayout" >
           < conversionPattern  value ="%logger"   />  
        </ layout >
       </ parameter >     
   < parameter >       
   < parameterName  value ="@message"   />
         < dbType  value ="String"   />    
      < size  value ="240"   />     
     < layout  type ="log4net.Layout.PatternLayout" >     
       < conversionPattern  value ="%message"   />  
        </ layout >   
     </ parameter >
     </ appender >    
  <!-- 定義日誌的輸出媒介,下面定義日誌以四種方式輸出。也能夠下面的按照一種類型或其餘類型輸出。 -->   
   < root >    
    <!-- 文件形式記錄日誌 -->     
   < appender-ref  ref ="LogFileAppender"   />   
     <!-- 控制檯控制顯示日誌 -->    
    < appender-ref  ref ="ConsoleAppender"   />   
     <!-- Windows事件日誌 -->
       < appender-ref  ref ="EventLogAppender"   />  
      <!--  若是不啓用相應的日誌記錄,能夠經過這種方式註釋掉       <appender-ref ref="AdoNetAppender_Access" />        -->    
  </ root >     
   </ log4net >
</ configuration >

程序文件:app

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Windows.Forms;
using  System.Reflection;
using  log4net;
// 注意下面的語句必定要加上,指定log4net使用.config文件來讀取配置信息
// 若是是WinForm(假定程序爲MyDemo.exe,則須要一個MyDemo.exe.config文件)
// 若是是WebForm,則從web.config中讀取相關信息
[assembly: log4net.Config.XmlConfigurator(Watch  =   true )]
namespace  Log4NetDemo {   
   ///   <summary>  
    ///  說明:本程序演示如何利用log4net記錄程序日誌信息。log4net是一個功能著名的開源日誌記錄組件。
     ///  利用log4net能夠方便地將日誌信息記錄到文件、控制檯、Windows事件日誌和數據庫中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。
     ///  下面的例子展現瞭如何利用log4net記錄日誌   
   ///  做者:周公      ///  時間:2008-3-26    
   ///   </summary>   
   public   class  MainClass     {       
   public   static   void  Main( string [] args)     
    {            
  // Application.Run(new MainForm());       
       // 建立日誌記錄組件實例         
    ILog log  =  log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);  
            // 記錄錯誤日誌      
       log.Error( " error " , new  Exception( " 發生了一個異常 " ));        
      // 記錄嚴重錯誤           
  log.Fatal( " fatal " , new  Exception( " 發生了一個致命錯誤 " ));   
           // 記錄通常信息       
      log.Info( " info " );        
      // 記錄調試信息        
     log.Debug( " debug " );        
      // 記錄警告信息       
      log.Warn( " warn " );        
     Console.WriteLine( " 日誌記錄完畢。 " );           
  Console.Read();        
    }  
  }
}

運行結果: 控制檯上的輸出ide

日誌文件內容網站

 

在這裏須要特別說明一下,注意上面的代碼中有這麼一句:[assembly: log4net.Config.XmlConfigurator(Watch = true)](在須要使用log4net的類的namespace處),若是沒有這句就會在調試時獲得以下留言中所說的「程序調試起來時isDebugEnable"的狀況,但願你們注意。 spa

相關文章
相關標籤/搜索