Log4net用法


Log4net簡介

Log4net 是Apache組織開發的著名的開源日志記錄組件,可以以插件的形式應用在應用系統中。利用Log4net可以方便的將日志信息記錄到文件,Windows事件日志和數據庫中(MS SQL SERVER,ORACLE等)。並且我們還可以控制要記載的日志級別,可以記載的日志級別包括:

1、FATAL (致命錯誤)

2、ERROR(一般錯誤)

3、WARN(警告)

4、INFO(一般信息)

5、DEBUG(調試信息)

下載log4net

log4net有4中主要組件,分別是Logger(記錄器),Repository(庫),Appender(附着器),Layout(布局)

Logger 提供了多種方式來記錄一個日志信息,可以在你的應用程序里創建多個Logger,每個實例化的Logger對象都被Log4net框架作為命名實體來維護。

Log4net框架定義了一個叫做LogManager的類,用來管理所有的Logger對象。它有一個靜態的GetLogger()靜態方法,用我們提供的名字參數來檢索已經存在的logger對象,如果框架不存在該Logger對象,它也會為我們創建一個Logger對象。

級別

允許的方法

Boolean屬性

優先級別

OFF

 

 

最高

FATAL

VoidFatal(object message)

Bool IsFatalEnabled

 

ERROR

Void Error(object message)

Bool IsErrorEnabled

 

WARN

Void Warn(object message)

Bool IsWarnEnabled

 

INFO

Void Info(object message)

Bool IsInfoEnabled

 

DEBUG

Void Debug(object message)

Bool IsDebugEnabled

 

ALL

 

 

最低

在Log4net框架里,通過設置配置文件,每個日志對象都被分配了一個日志優先級

例如,當創建一個日志對象,並且把它的級別設置為<level value="INFO"/> 框架會設置日志的每個Boolean屬性,當你調用相應的日志方法時候,框架會檢查相應的Boolean屬性,決定該方法能不能被執行。

例如
1 Logger.Info("Hello World");
2 Logger.DEBUG("Hello World");
3 Logger.WARN("Hello World");

對於第一種方法,能夠得到輸出

對於第二種方法,不能得到輸出,Debug的優先級低於Info

對於第三種,能夠得到輸出。

Appender

設定日志輸出的目的地,負責向存儲介質中追加日志,在配置文件中配置,通常有

AdoNetAppender

EventLogAppender

RollingFileAppender

Layout 日志消息記錄的格式,在配置文件中進行配置

%m (message) 輸出日志的消息

%n (new line) 換行

%d (datetime) 輸出當前語句的運行時間

%r(run time) 輸出程序從運行到執行再到當前語句的所耗費毫秒數

%t (thread id)當前語句的線程id

%p 日志的當前優先級別

%c 當前日志對象的名稱

%L 輸出語句所在的行號

%F 輸出語句所在文件名

%-數字 表示該項的最小長度。

使用步驟:

1,項目中添加Log4net.dll引用

2,在web.config中進行配置:

Web.config
 1 <configSections>
 2     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 3   </configSections>
 4   <log4net>
 5     <!--  <root>
 6       <level value="ALL"/>
 7       <appender-ref ref="rootFile"/>
 8     </root>-->
 9     <logger name="AppLogger1">
10       <level value="INFO"/>
11       <appender-ref ref="LogFileAppender"/>
12     </logger>
13     <logger name="AppLogger2">
14       <level value="DEBUG"/>
15       <appender-ref ref="rollingFile"/>
16     </logger>
17     <appender name="LogFileAppender" type="Log4net.Appender.FileAppender">
18       <param name="File" value="App.log"/>
19       <param name="AppendToFile" value="true"/>
20       <layout type="log4net.Layout.PatternLayout">
21         <param name="Header" value="--start--&#13;&#10;"/>
22         <param name="Footer" value="--end--&#13;&#10;"/>
23         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] %X(auth) - %m%n"/>
24       </layout>
25       <filter type="log4net.Filter.LevelRangeFilter">
26         <param name="LevelMin" value="DEBUG"/>
27         <param name="LevelMax" value="FATAL"/>
28       </filter>
29     </appender>
30     <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
31       <param name="File" type="" value="log/"/>
32       <param name="AppendToFile" value="true"/>
33       <param name="RollingStyle" value="Date"/>
34       <param name="DatePattern" value="yyyy-MM-dd"/>
35       <param name ="StaticLogFileName" value="false"/>
36       <layout type="log4net.Layout.PatternLayout,log4net">
37         <param name="ConversionPattern" value="%d [%t] %-5p %c  %L  %F - %m%n"/>
38         <param name="Header" value="--start--&#13;&#10;"/>
39         <param name="Footer" value="--end--&#13;&#10;"/>
40       </layout>
41     </appender>
42   </log4net>

Log4net下有root,logger,appender標簽

root標簽,所有的logger都從root繼承,root本身也是一個logger,root的設置在所有的Logger中都起作用,當在root和Logger中重復設定相同 的appender時,同一日志信息將被記錄兩次。

logger標簽,每個logger標簽代表一個logger,appender-ref表示該logger產生的日志消息傳遞給哪個appender,一個logger可以把相同的消息傳遞給多個appender記錄。

appender標簽,每個appender表示一個日志的存儲位置,name不能和type一樣。

3、在Global.ascx中的Application_Start方法加入:

    void Application_Start(object sender, EventArgs e)
    {
        //在應用程序啟動時運行的代碼
        log4net.Config.XmlConfigurator.Configure();
    }

4、調用代碼:

   log4net.ILog log = log4net.LogManager.GetLogger("AppLogger2");

   log.Error("Hello World");

以上面的配置,舉個SQL SERVER例子:

結果集:

--start--
2012-05-20 21:06:31,406 [5] ERROR AppLogger2  0   - ExecuteNonQuery 要求已打開且可用的 Connection。連接的當前狀態為已關閉。
2012-05-20 21:06:45,296 [6] ERROR AppLogger2  0   - ExecuteNonQuery 要求已打開且可用的 Connection。連接的當前狀態為已關閉。
--end--

調用端
 1 log4net.ILog log = log4net.LogManager.GetLogger("AppLogger2");
 2         try
 3         {
 4             string connectionString = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
 5             using (SqlConnection con = new SqlConnection(connectionString))
 6             {
 7                 SqlCommand cmd = new SqlCommand("DELETE FROM Categories WHERE CategoryID= 10 ", con);
 8                 cmd.ExecuteNonQuery();
 9             }
10         }
11         catch (Exception ex)
12         {
13             log.Error(ex.Message);
14             return;
15         }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM