由于log4net默認(rèn)情況下會(huì)獨(dú)占日志文件,該文件不能被File.Open。
可以通過(guò)增加配置:<
lockingModel
type="
log4net
.Appender.FileAppender+MinimalLock" />來(lái)使用最小鎖定模型(minimal locking model),以允許多個(gè)進(jìn)程可以寫(xiě)入同一個(gè)文件。
各種appender說(shuō)明:
在log4net的配置中,appender是最重要的部分,一般來(lái)說(shuō),每一種appender都表示一種日志的輸出介質(zhì),如日志文件、EvengLog、數(shù)據(jù)庫(kù)、控制臺(tái)、郵件、ASP.NET頁(yè)面等。
本文對(duì)各種內(nèi)置的appender的配置提供了示例,但卻遠(yuǎn)稱(chēng)不上詳盡。要想了解每一種appender的參數(shù)和選項(xiàng)的說(shuō)明,請(qǐng)參看該appender的SDK文檔。
?
以下示例都是.NET 2.0下進(jìn)行的, log4net的版本為1.2.10。
AdoNetAppender
詳情參考 log4net.Appender. AdoNetAppender SDK文檔 。
AdoNetAppender的相關(guān)配置內(nèi)容取決于目標(biāo)數(shù)據(jù)庫(kù)的provider。下面僅提供SQL Server 2000的例子。
?
首先建立數(shù)據(jù)表:
?
?(
???? [ Id ] ? [ int ] ? IDENTITY ?( 1 ,? 1 )? NOT ? NULL ,
???? [ Date ] ? [ datetime ] ? NOT ? NULL ,
???? [ Thread ] ? [ varchar ] ?( 255 )? NOT ? NULL ,
???? [ Level ] ? [ varchar ] ?( 50 )? NOT ? NULL ,
???? [ Logger ] ? [ varchar ] ?( 255 )? NOT ? NULL ,
???? [ Message ] ? [ varchar ] ?( 4000 )? NOT ? NULL ,
???? [ Exception ] ? [ varchar ] ?( 2000 )? NULL
)
然后添加配置:
?
???? < 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
表示批處理的日志事件,可以避免每次日志事件都訪(fǎng)問(wèn)數(shù)據(jù)庫(kù);
ConnectionType
指定了要使用的IDbConnection的完全限定類(lèi)型名稱(chēng);
connectionString
表示連接字符串;
CommandText
是SQL語(yǔ)句或存儲(chǔ)過(guò)程;最后一組
parameter
節(jié)點(diǎn)描述了SQL語(yǔ)句或存儲(chǔ)過(guò)程需要的參數(shù)。
?
AspNetTraceAppender ?
詳情參考 log4net.Appender.AspNetTraceAppender SDK 文檔 。?
?
???? < layout? type ="log4net.Layout.PatternLayout" >
???????? < conversionPattern? value ="%date?[%thread]?%-5level?%logger?[%property{NDC}]?-?%message%newline" ? />
???? </ layout >
</ appender >
這段配置可將日志信息輸出到頁(yè)面的Trace上下文環(huán)境。如果日志的級(jí)別低于WARN,會(huì)以System.Web.TraceContext.Write方法輸出;如果級(jí)別為WARN或WARN以上則會(huì)以System.Web.TraceContext.Warn方法輸出,下圖中的日志信息的不同顏色可以說(shuō)明這一點(diǎn)。效果圖如下:
這在進(jìn)行頁(yè)面調(diào)試的時(shí)候可是很方便的。
BufferingForwardingAppender
詳情參考
log4net.Appender.BufferingForwardingAppender SDK 文檔
。
???? < 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的主要作用是將輸出到指定類(lèi)型(這里是LogFileAppender)的Appender的日志信息進(jìn)行緩存。bufferSize屬性指定了緩存的數(shù)量,如果value為5,那么將在信息量達(dá)到6條的時(shí)候,把這些日志批量輸出。appender-ref屬性指定了緩存的Appender類(lèi)型,同root節(jié)點(diǎn)一樣,這里可以指定多個(gè)。
ColoredConsoleAppender
?
詳情參考 log4net.Appender.ColoredConsoleAppender SDK 文檔 。
ColoredConsoleAppender將日志信息輸出到控制臺(tái)。默認(rèn)情況下,日志信息被發(fā)送到控制臺(tái)標(biāo)準(zhǔn)輸出流。下面這個(gè)示例演示了如何高亮顯示Error信息。
???? < 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 >
效果如下:
還可以為不同的級(jí)別指定不同的顏色:
???? < 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將日志信息輸出到控制臺(tái)標(biāo)準(zhǔn)輸出流。
???? < layout? type ="log4net.Layout.PatternLayout" >
???????? < param? name ="ConversionPattern" ?value ="%d?[%t]?%-5p?%c?[%x]?-?%m%n" ? />
???? </ layout >
</ appender >
EventLogAppender
?
詳情參考
log4net.Appender.EventLogAppender SDK 文檔
。
?
EventLogAppender將日志寫(xiě)入本地機(jī)器的應(yīng)用程序事件日志中。默認(rèn)情況下,該日志的源(Source)是AppDomain.FriendlyName,也可以手動(dòng)指定其它名稱(chēng)。
???? < 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]-->
???? < 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指定了文件名稱(chēng),可以使用相對(duì)路徑,此時(shí)日志文件的位置取決于項(xiàng)目的類(lèi)型(如控制臺(tái)、Windows Forms、ASP.NET等);也可以使用絕對(duì)路徑;甚至可以使用環(huán)境變量,如<file value="${TMP}\log-file.txt" />。
AppendToFile指定是追加到還是覆蓋掉已有的日志文件。
還可以添加如下屬性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />來(lái)使用最小鎖定模型(minimal locking model),以允許多個(gè)進(jìn)程可以寫(xiě)入同一個(gè)文件。
ForwardingAppender ?
詳情參考
log4net.Appender.ForwardingAppender SDK 文檔
。
ForwardingAppender可以用來(lái)為一個(gè)Appender指定一組約束。看下面這個(gè)示例:
?
???? < threshold? value ="WARN" />
???? < appender-ref? ref ="ConsoleAppender" ? />
</ appender >
在這個(gè)示例中,為ConsoleAppender添加了約束,Threshold為WARN。這意味著對(duì)于一條日志信息,如果直接使用ConsoleAppender,那么不論它是什么級(jí)別,總會(huì)進(jìn)行輸出,而如果使用這個(gè)ForwardingAppender,則只有那些WARN或WARN以上的日志才會(huì)發(fā)送到ConsoleAppender。?
MemoryAppender
詳情參考
log4net.Appender.MemoryAppender SDK 文檔
。
似乎不應(yīng)該使用配置文件來(lái)配置MemoryAppender,但如果你非要這么做,看看這個(gè)示例(未驗(yàn)證):
?
???? < onlyFixPartialEventData? value ="true" ? />
</ appender >
NetSendAppender
?
詳情參考 log4net.Appender.NetSendAppender SDK 文檔 。
NetSendAppender向特定用戶(hù)的屏幕發(fā)送消息(未驗(yàn)證)。
?
???? < 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 文檔
。?
下面這個(gè)例子描述了如何配置該Appender以向OutputDebugString API寫(xiě)入日志(未驗(yàn)證)。
?
?
???? < layout? type ="log4net.Layout.PatternLayout" >
???????? < conversionPattern? value ="%date?[%thread]?%-5level?%logger?[%property{NDC}]?-?%message%newline" ? />
???? </ layout >
</ appender >
RemotingAppender
詳情參考
log4net.Appender.RemotingAppender SDK 文檔
。
RemotingAppender向特定的Sink發(fā)送日志信息(未驗(yàn)證):
<!--[if !vml]-->
???? < sink? value ="tcp://localhost:8085/LoggingSink" ? />
???? < lossy? value ="false" ? />
???? < bufferSize? value ="95" ? />
???? < onlyFixPartialEventData? value ="true" ? />
</ appender >
RollingFileAppender
詳情參考
log4net.Appender.RollingFileAppender SDK 文檔
。
RollingFileAppender以FileAppender為基礎(chǔ),與后者有著相同的配置選項(xiàng)。
下面這個(gè)例子演示了如何配置RollingFileAppender以寫(xiě)入log.txt文件。寫(xiě)入的文件名總是為log.txt(StaticLogFileName參數(shù)指定為true);根據(jù)文件大?。≧ollingStyle)來(lái)生成新的文件;最多保存有10個(gè)文件(MaxSizeRollBackups屬性,而且一旦寫(xiě)滿(mǎn)10個(gè)文件,就不再寫(xiě)入日志了),每個(gè)文件最大為10KB。這些文件名稱(chēng)為log.txt.1, log.txt.2…等。
?
???? < 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通過(guò)Smtp郵件服務(wù)器發(fā)送日志信息:
?
???????????? < authentication? value ="Basic" ? />
???????????? < to? value ="anderscui@tom.com" ? />
???????????? < from? value ="anderscui@163.com" ? />
???????????? < 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配置正確才可能發(fā)送成功。bufferSize可將多條信息打包在一個(gè)郵件中。evaluator可以對(duì)日志進(jìn)行過(guò)濾。
SmtpPickupDirAppender
詳情參考
log4net.Appender.SmtpPickupDirAppender SDK 文檔
。
配置與SmtpAppender類(lèi)似,但要把SmtpHost換為PickupDir(未驗(yàn)證)。
?
???? < to? value ="to@domain.com" ? />
???? < from? value ="from@domain.com" ? />
???? < 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將日志信息寫(xiě)入System.Diagnostics.Trace系統(tǒng)(出現(xiàn)在輸出窗口)。
???? < layout? type ="log4net.Layout.PatternLayout" >
???????? < conversionPattern? value ="%date?[%thread]?%-5level?%logger?[%property{NDC}]?-?%message%newline" ? />
???? </ layout >
</ appender >
UdpAppender
詳情參考 log4net.Appender.UdpAppender SDK 文檔 。
下例演示了如何配置UdpAppender(未驗(yàn)證):
???? < 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 >
上面有若干個(gè)Appender標(biāo)注為"未驗(yàn)證"的,是指這些Appender極少用到,或者在我的機(jī)器上沒(méi)能實(shí)現(xiàn)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
