日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘至:http://www.cnblogs.com/jacktu/archive/2007/12/05/984487.html

由于log4net默認情況下會獨占日志文件,該文件不能被File.Open。
可以通過增加配置:<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />來使用最小鎖定模型(minimal locking model),以允許多個進程可以寫入同一個文件。


各種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?(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
)

然后添加配置:

?

<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="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配置正確才可能發送成功。bufferSize可將多條信息打包在一個郵件中。evaluator可以對日志進行過濾。

SmtpPickupDirAppender

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

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

<appender?name="SmtpPickupDirAppender"?type="log4net.Appender.SmtpPickupDirAppender">
????
<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將日志信息寫入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極少用到,或者在我的機器上沒能實現 :(

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

轉載于:https://www.cnblogs.com/gllgsoft/archive/2008/11/24/1339778.html

總結

以上是生活随笔為你收集整理的解决log4net独占日志文件的问题以及 log4net的各种输出配置(Appender)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。