log4net的各種Appender配置示例

log4net的各種Appender配置示例

在log4net的配置中,appender是最重要的部分,一般來說,每一種appender都表示一種日誌的輸出介質,如日誌文件、EvengLog、數據庫、控制檯、郵件、ASP.NET頁面等。

本文對各種內置的appender的配置提供了示例,但卻遠稱不上詳盡。要想了解每一種appender的參數和選項的說明,請參看該appender的SDK文檔。

以下示例都是.NET 2.0下進行的, log4net的版本爲1.2.10。

AdoNetAppender

詳情參考 log4net.Appender. AdoNetAppender SDK文檔

AdoNetAppender的相關配置內容取決於目標數據庫的provider。下面僅提供SQL Server 2000的例子。

首先建立數據表:

 

CREATE TABLE [dbo].[Log]
 (
    
[Id] [int] IDENTITY (11NOT NULL,
    
[Date] [datetime] NOT NULL,
    
[Thread] [varchar] (255NOT NULL,
    
[Level] [varchar] (50NOT NULL,
    
[Logger] [varchar] (255NOT NULL,
    
[Message] [varchar] (4000NOT NULL,
    
[Exception] [varchar] (2000NULL
)

然後添加配置:

 

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    
<bufferSize value="2" />
    
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
    
<connectionString value="server=(local);database=TestBase;integrated security=false;persist security info=True;UID=sa;PWD=" />
    
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
    
<parameter>
        
<parameterName value="@log_date" />
        
<dbType value="DateTime" />
        
<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>
    
<parameter>
        
<parameterName value="@exception" />
        
<dbType value="String" />
        
<size value="2000" />
        
<layout type="log4net.Layout.ExceptionLayout" />
    
</parameter>
</appender>

bufferSize表示批處理的日誌事件,可以避免每次日誌事件都訪問數據庫;ConnectionType指定了要使用的IDbConnection的完全限定類型名稱;connectionString表示連接字符串;CommandText是SQL語句或存儲過程;最後一組parameter節點描述了SQL語句或存儲過程需要的參數。

 

AspNetTraceAppender 

詳情參考 log4net.Appender.AspNetTraceAppender SDK 文檔。 

 

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

這段配置可將日誌信息輸出到頁面的Trace上下文環境。如果日誌的級別低於WARN,會以System.Web.TraceContext.Write方法輸出;如果級別爲WARN或WARN以上則會以System.Web.TraceContext.Warn方法輸出,下圖中的日誌信息的不同顏色可以說明這一點。效果圖如下:



這在進行頁面調試的時候可是很方便的。

BufferingForwardingAppender

詳情參考 log4net.Appender.BufferingForwardingAppender SDK 文檔

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
    
<bufferSize value="5"/>
    
<lossy value="true" />
    
<evaluator type="log4net.Core.LevelEvaluator">
        
<threshold value="WARN"/>
    
</evaluator>
    
<appender-ref ref="LogFileAppender" />
    
<appender-ref ref="AspNetTraceAppender" />
</appender>

BufferingForwardingAppender的主要作用是將輸出到指定類型(這裏是LogFileAppender)的Appender的日誌信息進行緩存。bufferSize屬性指定了緩存的數量,如果value爲5,那麼將在信息量達到6條的時候,把這些日誌批量輸出。appender-ref屬性指定了緩存的Appender類型,同root節點一樣,這裏可以指定多個。

ColoredConsoleAppender
 

詳情參考log4net.Appender.ColoredConsoleAppender SDK 文檔

ColoredConsoleAppender將日誌信息輸出到控制檯。默認情況下,日誌信息被髮送到控制檯標準輸出流。下面這個示例演示瞭如何高亮顯示Error信息。

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    
<mapping>
        
<level value="ERROR" />
        
<foreColor value="White" />
        
<backColor value="Red, HighIntensity" />
    
</mapping>
    <layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

效果如下:


還可以爲不同的級別指定不同的顏色:

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    
<mapping>
        
<level value="ERROR" />
        
<foreColor value="White" />
        
<backColor value="Red, HighIntensity" />
    
</mapping>
    
<mapping>
        
<level value="DEBUG" />
        
<backColor value="Green" />
    
</mapping>
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

效果如下:



ConsoleAppender
 

詳情參考 log4net.Appender.ConsoleAppender SDK 文檔

ConsoleAppender將日誌信息輸出到控制檯標準輸出流。

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    
</layout>
</appender>

EventLogAppender 

詳情參考 log4net.Appender.EventLogAppender SDK 文檔

EventLogAppender將日誌寫入本地機器的應用程序事件日誌中。默認情況下,該日誌的源(Source)是AppDomain.FriendlyName,也可以手動指定其它名稱。

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    
</layout>
</appender>

FileAppender

詳情參考 log4net.Appender.File Appender SDK 文檔

FileAppender將日誌信息輸出到指定的日誌文件。

<!--[if !vml]-->

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
    
<param name="File" value="WebUtilClient.log" />
    
<param name="AppendToFile" value="true" />
    
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    
</layout>
</appender>

File指定了文件名稱,可以使用相對路徑,此時日誌文件的位置取決於項目的類型(如控制檯、Windows Forms、ASP.NET等);也可以使用絕對路徑;甚至可以使用環境變量,如<file value="${TMP}/log-file.txt" />。
AppendToFile指定是追加到還是覆蓋掉已有的日誌文件。
還可以添加如下屬性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />來使用最小鎖定模型(minimal locking model),以允許多個進程可以寫入同一個文件。

ForwardingAppender 

詳情參考 log4net.Appender.ForwardingAppender SDK 文檔

ForwardingAppender可以用來爲一個Appender指定一組約束。看下面這個示例:

<appender name="ForwardingAppender" type="log4net.Appender.ForwardingAppender" >
    
<threshold value="WARN"/>
    
<appender-ref ref="ConsoleAppender" />
</appender>

在這個示例中,爲ConsoleAppender添加了約束,Threshold爲WARN。這意味着對於一條日誌信息,如果直接使用ConsoleAppender,那麼不論它是什麼級別,總會進行輸出,而如果使用這個ForwardingAppender,則只有那些WARN或WARN以上的日誌纔會發送到ConsoleAppender。 

MemoryAppender

詳情參考 log4net.Appender.MemoryAppender SDK 文檔

似乎不應該使用配置文件來配置MemoryAppender,但如果你非要這麼做,看看這個示例(未驗證):

<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    
<onlyFixPartialEventData value="true" />
</appender>

NetSendAppender 

詳情參考 log4net.Appender.NetSendAppender SDK 文檔

NetSendAppender向特定用戶的屏幕發送消息(未驗證)。

<appender name="NetSendAppender" type="log4net.Appender.NetSendAppender">
    
<threshold value="ERROR" />
    
<server value="Anders" />
    
<recipient value="xym" />
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

OutputDebugStringAppender

詳情參考 log4net.Appender.OutputDebugStringAppender SDK 文檔。 

下面這個例子描述瞭如何配置該Appender以向OutputDebugString API寫入日誌(未驗證)。

 

<appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" >
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

RemotingAppender

詳情參考 log4net.Appender.RemotingAppender SDK 文檔

RemotingAppender向特定的Sink發送日誌信息(未驗證):

<!--[if !vml]-->

<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" >
    
<sink value="tcp://localhost:8085/LoggingSink" />
    
<lossy value="false" />
    
<bufferSize value="95" />
    
<onlyFixPartialEventData value="true" />
</appender>

RollingFileAppender

詳情參考 log4net.Appender.RollingFileAppender SDK 文檔

RollingFileAppender以FileAppender爲基礎,與後者有着相同的配置選項。

下面這個例子演示瞭如何配置RollingFileAppender以寫入log.txt文件。寫入的文件名總是爲log.txt(StaticLogFileName參數指定爲true);根據文件大小(RollingStyle)來生成新的文件;最多保存有10個文件(MaxSizeRollBackups屬性,而且一旦寫滿10個文件,就不再寫入日誌了),每個文件最大爲10KB。這些文件名稱爲log.txt.1, log.txt.2…等。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    
<param name="File" value="log/Log.txt" />
    
<param name="AppendToFile" value="true" />
    
<param name="MaxSizeRollBackups" value="10" />
    
<param name="MaximumFileSize" value="5MB" />
    
<param name="RollingStyle" value="Size" />
    
<param name="StaticLogFileName" value="true" />
    
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
    
</layout>
</appender>

SmtpAppender

詳情參考 log4net.Appender.SmtpAppender SDK 文檔

SmtpAppender通過Smtp郵件服務器發送日誌信息:

        <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
            
<authentication value="Basic" />
            
<to value="[email protected]" />
            
<from value="[email protected]" />
            
<username value="anderscui" />
            
<password value="password" />
            
<subject value="test logging message" />
            
<smtpHost value="smtp.163.com" />
            
<bufferSize value="512" />
            
<lossy value="true" />
            
<evaluator type="log4net.Core.LevelEvaluator">
                
<threshold value="WARN"/>
            
</evaluator>
            
<layout type="log4net.Layout.PatternLayout">
                
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
            
</layout>
        
</appender>

將其中的to、from、username、password、subject、smtpHost配置正確纔可能發送成功。bufferSize可將多條信息打包在一個郵件中。evaluator可以對日誌進行過濾。

SmtpPickupDirAppender

詳情參考 log4net.Appender.SmtpPickupDirAppender SDK 文檔

配置與SmtpAppender類似,但要把SmtpHost換爲PickupDir(未驗證)。

<appender name="SmtpPickupDirAppender" type="log4net.Appender.SmtpPickupDirAppender">
    
<to value="[email protected]" />
    
<from value="[email protected]" />
    
<subject value="test logging message" />
    
<pickupDir value="C:/SmtpPickup" />
    
<bufferSize value="512" />
    
<lossy value="true" />
    
<evaluator type="log4net.Core.LevelEvaluator">
        
<threshold value="WARN"/>
    
</evaluator>
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    
</layout>
</appender>

TraceAppender

詳情參考 log4net.Appender.TraceAppender SDK 文檔

TraceAppender將日誌信息寫入System.Diagnostics.Trace系統(出現在輸出窗口)。

<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

UdpAppender

詳情參考 log4net.Appender.UdpAppender SDK 文檔

下例演示瞭如何配置UdpAppender(未驗證):

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    
<localPort value="8080" />
    
<remoteAddress value="224.0.0.1" />
    
<remotePort value="8080" />
    
<layout type="log4net.Layout.PatternLayout, log4net">
        
<conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
    
</layout>
</appender>

上面有若干個Appender標註爲"未驗證"的,是指這些Appender極少用到,或者在我的機器上沒能實現 :(

希望這些內容能對您有所幫助。



                                                                                                 By Anders Cui


原文地址:http://logging.apache.org/log4net/release/config-examples.html
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章