亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Log4Net配置詳解及輸出自定義消息類示例代碼

 更新時(shí)間:2024年07月05日 09:49:11   作者:letmebaby  
這篇文章主要介紹了Log4Net配置詳解及輸出自定義消息類示例代碼,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

1.簡(jiǎn)單使用實(shí)例

1.1 添加log4net.dll的引用。

  在NuGet程序包中搜索log4net并添加,此次我所用版本為2.0.17。如下圖:

1.2 添加配置文件

  右鍵項(xiàng)目,添加新建項(xiàng),搜索選擇應(yīng)用程序配置文件,命名為log4net.config,步驟如下圖:

1.2.1 log4net.config簡(jiǎn)單配置示例

  下面是一個(gè)簡(jiǎn)單的配置示例,詳細(xì)節(jié)點(diǎn)及相應(yīng)的說明詳見 2. 配置文件節(jié)點(diǎn)詳解 。

log4net.config配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
	<logger name="DefaultLog">
		<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
		<!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
		<level value="ALL" />
		<appender-ref ref="FileAppenderDefault"></appender-ref>
	</logger>
	<!-- appender 定義日志輸出方式   將日志以回滾文件的形式寫到文件中。-->
	<appender name="FileAppenderDefault" type="log4net.Appender.RollingFileAppender">
		<!--絕對(duì)路徑-->
		<!--<file value="D:\KangarooLog.txt"></file>-->
		<!--日志輸出到exe程序這個(gè)相對(duì)目錄下-->
		<file value="../../Log/DefalutLog" />
		<!--相對(duì)路徑,在項(xiàng)目的根目錄下-->
		<!--以最后一個(gè)路徑為準(zhǔn),所以上面的絕對(duì)路徑下不會(huì)寫日志-->
		<!--<file value="./Log/Kangaroo.txt"></file>-->
		<!--防止多線程時(shí)不能寫Log,官方說線程非安全-->
		<!--實(shí)際使用時(shí),本地測(cè)試正常,部署后沒有不能寫日志的情況-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<!--追加日志內(nèi)容,true后續(xù)輸出的日志會(huì)追加到之前的日志文件-->
		<appendToFile value="true" />
		<!--可以為:Once|Size|Date|Composite-->
		<!--Composite為Size和Date的組合-->
		<rollingStyle value="Composite" />
		<!--日志最大個(gè)數(shù),都是最新的-->
		<!--rollingStyle節(jié)點(diǎn)為Date時(shí),該節(jié)點(diǎn)不起作用-->
		<!--rollingStyle節(jié)點(diǎn)為Size時(shí),只能有value個(gè)日志-->
		<!--rollingStyle節(jié)點(diǎn)為Composite時(shí),每天有value個(gè)日志-->
		<maxSizeRollBackups value="10" />
		<!--當(dāng)備份文件時(shí),為文件名加的后綴-->
		<!--后綴為*.txt時(shí),例:AX.txt_2008-07-24.PxP  應(yīng)該是程序上的一個(gè)bug-->
		<!--后綴為*.TXT時(shí),例:AX.txt_2008-07-25.TXT-->
		<datePattern value="_yyyy-MM-dd'.log'" />
		<!--每個(gè)文件的大小。只在混合方式與文件大小方式下使用。超出大小后在所有文件名后自動(dòng)增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?KB|MB|GB。不要使用小數(shù),否則會(huì)一直寫入當(dāng)前日志-->
		<maximumFileSize value="10MB" />
		<!--置為true,當(dāng)前最新日志文件名永遠(yuǎn)為file節(jié)中的名字-->
		<staticLogFileName value="false" />
		<!--輸出級(jí)別在INFO和ERROR之間的日志-->
		<!--<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="INFO" />
			<param name="LevelMax" value="ERROR" />
		</filter>-->
		<!--必須結(jié)合起來用,第一個(gè)只過濾出WARN,第二個(gè)拒絕其它其它日志輸出-->
		<filter type="log4net.Filter.LevelMatchFilter">
			<param name="LevelToMatch" value="WARN" />
		</filter>
		<filter type="log4net.Filter.DenyAllFilter" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%n==========
			%n【日志級(jí)別】%-5level
			%n【記錄時(shí)間】%date
			%n【執(zhí)行時(shí)間】[%r]毫秒
			%n【執(zhí)行Log分類的名稱】%logger
			%n【傳入信息內(nèi)容】%message
			%n=========="/>
		</layout>
	</appender>
</log4net>
</configuration>
<!--==================================layout節(jié)點(diǎn)的配置說明==================================-->
<!--                                                                        Made By YSL      -->
<!--        %m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息                          -->
<!--        %n(new line):換行                                                                   -->
<!--        %d(datetime):輸出當(dāng)前語句運(yùn)行的時(shí)刻                                                 -->
<!--        %r(run time):輸出程序從運(yùn)行到執(zhí)行到當(dāng)前語句時(shí)消耗的毫秒數(shù)                           -->
<!--        %t(thread id):當(dāng)前語句所在的線程ID                                                  -->
<!--        %p(priority): 日志的當(dāng)前優(yōu)先級(jí)別,即DEBUG、INFO、WARN…等                           -->
<!--        %c(class):當(dāng)前日志對(duì)象的名稱,例如:                                                -->
<!--               模式字符串為:%-10c -%m%n                                                    -->
<!--               代碼為:                                                                     -->
<!--        ILog log=LogManager.GetLogger(“Exam.Log”);                                        -->
<!--        log.Debug(“Hello”);                                                               -->
<!--            則輸出為下面的形式:                                                            -->
<!--        Exam.Log       - Hello                                                              -->
<!--        %L:輸出語句所在的行號(hào)                                                              -->
<!--        %F:輸出語句所在的文件名                                                            -->
<!--        %-數(shù)字:表示該項(xiàng)的最小長(zhǎng)度,如果不夠,則用空格填充                                  -->

1.2.2 設(shè)置log4net.config配置文件屬性

  點(diǎn)擊log4net.config,將其文件屬性設(shè)為始終復(fù)制,如下圖:

image

1.3 在項(xiàng)目中引入該配置文件

  這里有兩種方式引入配置文件。

1.3.1 在項(xiàng)目的 AssemblyInfo.cs 中引入配置文件

  首先在項(xiàng)目中新建一個(gè)Config文件夾,將之前創(chuàng)建的log4net.config文件放入其中,隨后在 AssemblyInfo.cs 中添加如下語句:

image

1.3.2 在項(xiàng)目運(yùn)行時(shí)動(dòng)態(tài)引入配置文件

  使用固定語句引入配置文件,如下所示,其中,configFilePath 為配置文件的絕對(duì)路徑。

log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(configFilePath));

1.4 創(chuàng)建幫助類使用日志進(jìn)行記錄

  我們首先創(chuàng)建名為 Log4Helper 的類,并使用固定的log4net.LogManager.GetLogger()語句實(shí)例化對(duì)應(yīng)的Log對(duì)象,然后調(diào)用其對(duì)應(yīng)的方法即可寫入日志。示例代碼如下:

Log4Helper代碼

 public class Log4Helper
 {
     private static readonly log4net.ILog logDefault = log4net.LogManager.GetLogger("DefaultLog");
     /// <summary>
     /// 測(cè)試默認(rèn)配置信息輸出(輸出范圍做了限制)
     /// </summary>
     public static void TestDefaultLog()
     {
         logDefault.Debug("這是條調(diào)試信息");
         logDefault.Info("這是條提示信息");
         logDefault.Warn("這是條警告信息");
         logDefault.Error("這是條錯(cuò)誤信息");
         logDefault.Fatal("這是條致命錯(cuò)誤信息");
     }
     /// <summary>
     /// Log4Net初始化(可讀取自定義配置)
     /// </summary>
     /// <param name="configFilePath"></param>
     public static void Log4NetInit(string configFilePath)
     {
         log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(configFilePath));
     }
     /// <summary>
     /// 返回指定名稱的日志對(duì)象
     /// </summary>
     public static log4net.ILog Log(string appenderName)
     {
         return log4net.LogManager.GetLogger(appenderName);
     }
 }

1.5 在主程序中引用

  最后一步就是在主程序中引用 Log4Helper 中的日志記錄方法,如下所示:

private void Application_Startup(object sender, StartupEventArgs e)
 {
     Log4Helper.TestDefaultLog();
 }

  根據(jù)上面 log4net.config 配置中 file 節(jié)點(diǎn)中的地址,在項(xiàng)目中會(huì)生成 Log 文件夾,該文件夾下會(huì)生成類似 DefalutLog_2024-07-01.log 的文件。該文件名由 file 節(jié)點(diǎn)和 datePattern 節(jié)點(diǎn)兩部分組合而成,其中,staticLogFileName節(jié)點(diǎn)需要被設(shè)置為 false ,若為 true ,則當(dāng)前最新日志文件名永遠(yuǎn)為 file 節(jié)點(diǎn)中的名字,其余日志會(huì)根據(jù) datePattern 節(jié)點(diǎn)自動(dòng)添加后綴。

  打開日志文件,會(huì)發(fā)現(xiàn)里面只有 WARN 警告信息,例如:

==========                     
【日志級(jí)別】WARN                      
【記錄時(shí)間】2024-07-01 00:18:28,828                     
【執(zhí)行時(shí)間】[53]毫秒                     
【執(zhí)行Log分類的名稱】DefaultLog              
【傳入信息內(nèi)容】這是條警告信息             
==========

  這是因?yàn)榕渲弥械?filter 過濾節(jié)點(diǎn),詳見注釋,將其注釋再次運(yùn)行,則會(huì)正常顯示全部日志信息。

2. 配置文件節(jié)點(diǎn)詳解

  log4net的主要組成有四部分,分別是 Logger、Appender、Layout、Filter等,詳見下方。

2.1 Logger 節(jié)點(diǎn)配置詳解

  以上文的配置為例解釋:

<logger name="DefaultLog">
	<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
	<!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
	<level value="ALL" />
	<appender-ref ref="FileAppenderDefault"></appender-ref>
</logger>

  level 定義記錄的日志級(jí)別,就是說,你要記錄哪個(gè)級(jí)別以上的日志,級(jí)別由低到高依次是:

ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF

  如果你 level 定義 INFO,那么低于 INFO 級(jí)別以下的信息,將不會(huì)記入日志,啥意思呢?
  就是說,就算你在程序里,用 log.Debug() 來寫入一個(gè)日志信息,可是你在配置中指定 level 為 INFO,由于 DEBUG 級(jí)別低于 INFO,所以,不會(huì)被記入日志。這樣的處理非常靈活。

  在具體寫日志時(shí),一般可以這樣理解日志等級(jí):

FATAL(致命錯(cuò)誤):記錄系統(tǒng)中出現(xiàn)的能使用系統(tǒng)完全失去功能,服務(wù)停止,系統(tǒng)崩潰等使系統(tǒng)無法繼續(xù)運(yùn)行下去的錯(cuò)誤。例如,數(shù)據(jù)庫無法連接,系統(tǒng)出現(xiàn)死循環(huán)。

ERROR(一般錯(cuò)誤):記錄系統(tǒng)中出現(xiàn)的導(dǎo)致系統(tǒng)不穩(wěn)定,部分功能出現(xiàn)混亂或部分功能失效一類的錯(cuò)誤。例如,數(shù)據(jù)字段為空,數(shù)據(jù)操作不可完成,操作出現(xiàn)異常等。

WARN(警告):記錄系統(tǒng)中不影響系統(tǒng)繼續(xù)運(yùn)行,但不符合系統(tǒng)運(yùn)行正常條件,有可能引起系統(tǒng)錯(cuò)誤的信息。例如,記錄內(nèi)容為空,數(shù)據(jù)內(nèi)容不正確等。

INFO(一般信息):記錄系統(tǒng)運(yùn)行中應(yīng)該讓用戶知道的基本信息。例如,服務(wù)開始運(yùn)行,功能已經(jīng)開戶等。

DEBUG (調(diào)試信息):記錄系統(tǒng)用于調(diào)試的一切信息,內(nèi)容或者是一些關(guān)鍵數(shù)據(jù)內(nèi)容的輸出。

  appender-ref,要引用的 appender 的名字,由 Layout 控制輸出格式。

  最后還要說一個(gè)LogManager類,它用來管理所有的Logger。它的GetLogger靜態(tài)方法,可以獲得配置文件中相應(yīng)的Logger:

log4net.ILog log = log4net.LogManager.GetLogger("logger-name");

2.2 Appender 節(jié)點(diǎn)配置詳解

  以上文的 FileAppenderDefault 節(jié)點(diǎn)為例:

 FileAppenderDefault 節(jié)點(diǎn)配置

<!-- appender 定義日志輸出方式   將日志以回滾文件的形式寫到文件中。-->
	<appender name="FileAppenderDefault" type="log4net.Appender.RollingFileAppender">
		<!--絕對(duì)路徑-->
		<!--<file value="D:\KangarooLog.txt"></file>-->
		<!--日志輸出到exe程序這個(gè)相對(duì)目錄下-->
		<file value="../../Log/DefalutLog" />
		<!--相對(duì)路徑,在項(xiàng)目的根目錄下-->
		<!--以最后一個(gè)路徑為準(zhǔn),所以上面的絕對(duì)路徑下不會(huì)寫日志-->
		<!--<file value="./Log/Kangaroo.txt"></file>-->
		<!--防止多線程時(shí)不能寫Log,官方說線程非安全-->
		<!--實(shí)際使用時(shí),本地測(cè)試正常,部署后沒有不能寫日志的情況-->
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<!--追加日志內(nèi)容,true后續(xù)輸出的日志會(huì)追加到之前的日志文件-->
		<appendToFile value="true" />
		<!--可以為:Once|Size|Date|Composite-->
		<!--Composite為Size和Date的組合-->
		<rollingStyle value="Composite" />
		<!--日志最大個(gè)數(shù),都是最新的-->
		<!--rollingStyle節(jié)點(diǎn)為Date時(shí),該節(jié)點(diǎn)不起作用-->
		<!--rollingStyle節(jié)點(diǎn)為Size時(shí),只能有value個(gè)日志-->
		<!--rollingStyle節(jié)點(diǎn)為Composite時(shí),每天有value個(gè)日志-->
		<maxSizeRollBackups value="10" />
		<!--當(dāng)備份文件時(shí),為文件名加的后綴-->
		<!--后綴為*.txt時(shí),例:AX.txt_2008-07-24.PxP  應(yīng)該是程序上的一個(gè)bug-->
		<!--后綴為*.TXT時(shí),例:AX.txt_2008-07-25.TXT-->
		<datePattern value="_yyyy-MM-dd'.log'" />
		<!--每個(gè)文件的大小。只在混合方式與文件大小方式下使用。超出大小后在所有文件名后自動(dòng)增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?KB|MB|GB。不要使用小數(shù),否則會(huì)一直寫入當(dāng)前日志-->
		<maximumFileSize value="10MB" />
		<!--置為true,當(dāng)前最新日志文件名永遠(yuǎn)為file節(jié)中的名字-->
		<staticLogFileName value="false" />
		<!--輸出級(jí)別在INFO和ERROR之間的日志-->
		<!--<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="INFO" />
			<param name="LevelMax" value="ERROR" />
		</filter>-->
		<!--必須結(jié)合起來用,第一個(gè)只過濾出WARN,第二個(gè)拒絕其它其它日志輸出-->
		<filter type="log4net.Filter.LevelMatchFilter">
			<param name="LevelToMatch" value="WARN" />
		</filter>
		<filter type="log4net.Filter.DenyAllFilter" />
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%n==========
			%n【日志級(jí)別】%-5level
			%n【記錄時(shí)間】%date
			%n【執(zhí)行時(shí)間】[%r]毫秒
			%n【執(zhí)行Log分類的名稱】%logger
			%n【傳入信息內(nèi)容】%message
			%n=========="/>
		</layout>
	</appender>

  每個(gè)節(jié)點(diǎn)均寫有注釋,這里額外介紹下 appender 的輸出方式( type 屬性),如下所示:

 appender 輸出方式

AdoNetAppender              將日志記錄到數(shù)據(jù)庫中??梢圆捎肧QL和存儲(chǔ)過程兩種方式。
	AnsiColorTerminalAppender   將日志高亮輸出到ANSI終端。
	AspNetTraceAppender         能用asp.net中Trace的方式查看記錄的日志。
	BufferingForwardingAppender 在輸出到子Appenders之前先緩存日志事件。
	ConsoleAppender             將日志輸出到應(yīng)用程序控制臺(tái)。
	EventLogAppender            將日志寫到Windows Event Log。
	FileAppender                將日志輸出到文件。
	ForwardingAppender          發(fā)送日志事件到子Appenders。
	LocalSyslogAppender         將日志寫到local syslog service (僅用于UNIX環(huán)境下)。
	MemoryAppender              將日志存到內(nèi)存緩沖區(qū)。
	NetSendAppender             將日志輸出到Windows Messenger service.這些日志信息將在用戶終端的對(duì)話框中顯示。
	OutputDebugStringAppender   將日志輸出到Debuger,如果程序沒有Debuger,就輸出到系統(tǒng)Debuger。如果系統(tǒng)Debuger也不可用,將忽略消息。
	RemoteSyslogAppender        通過UDP網(wǎng)絡(luò)協(xié)議將日志寫到Remote syslog service。
	RemotingAppender            通過.NET Remoting將日志寫到遠(yuǎn)程接收端。
	RollingFileAppender         將日志以回滾文件的形式寫到文件中。
	SmtpAppender                將日志寫到郵件中。
	SmtpPickupDirAppender       將消息以文件的方式放入一個(gè)目錄中,像IIS SMTP agent這樣的SMTP代理就可以閱讀或發(fā)送它們。
	TelnetAppender              客戶端通過Telnet來接受日志事件。
	TraceAppender               將日志寫到.NET trace 系統(tǒng)。
	UdpAppender                 將日志以無連接UDP數(shù)據(jù)報(bào)的形式送到遠(yuǎn)程宿主或用UdpClient的形式廣播。

2.3 Filter 節(jié)點(diǎn)配置詳解

  filter只能作為 appender 的子元素,type 屬性表示 Filter 的類型。常用子元素 param 數(shù)量0個(gè)或多個(gè),作用設(shè)置一些參數(shù)。具體例子詳見上文 2.2 Appender 節(jié)點(diǎn)配置詳解 。

  額外補(bǔ)充下 filter 的類型說明:

DenyAllFilter       阻止所有的日志事件被記錄
	LevelMatchFilter    只有指定等級(jí)的日志事件才被記錄
	LevelRangeFilter    日志等級(jí)在指定范圍內(nèi)的事件才被記錄
	LoggerMatchFilter   Logger名稱匹配,才記錄
	PropertyFilter      消息匹配指定的屬性值時(shí)才被記錄
	StringMathFilter    消息匹配指定的字符串才被記錄

2.4 Layout 節(jié)點(diǎn)配置詳解

  layout 節(jié)點(diǎn)只能作為 appender 的子元素。type 屬性表示 Layout 的類型。具體例子詳見上文 2.2 Appender 節(jié)點(diǎn)配置詳解 。

  額外補(bǔ)充 layout 節(jié)點(diǎn)的 type 屬性取值:

ExceptionLayout         只呈現(xiàn)日志事件中異常的文本信息
	PatternLayout           可以通過類型字符串來配置的布局
	RawPropertyLayout       從日志事件中提取屬性值
	RawTimeStampLayout      從日志事件中提取日期
	RawUtcTimeStampLayout   從日志事件中提取UTC日期
	SimpleLayout            很簡(jiǎn)單的布局
	XmlLayout               把日志事件格式化為XML元素的布局

  這其中我們主要使用的還是PatternLayout 類型,而在 ConversionPattern 節(jié)點(diǎn)中,我們可以進(jìn)一步的配置日志輸出格式,以 PatterLayout 的格式化字符串輸出為例:

 PatterLayout 的格式化字符串

    %m、%message         輸出的日志消息
    %d、%datetime        輸出當(dāng)前語句運(yùn)行的時(shí)刻,格式%date{yyyy-MM-dd HH:mm:ss,fff}
    %r、%timestamp       輸出程序從運(yùn)行到執(zhí)行到當(dāng)前語句時(shí)消耗的毫秒數(shù)
    %p、%level           日志的當(dāng)前優(yōu)先級(jí)別
    %c、%logger          當(dāng)前日志對(duì)象的名稱
    %L、%line            輸出語句所在的行號(hào)
    %F、%file            輸出語句所在的文件名,警告:只在調(diào)試的時(shí)候有效,調(diào)用本地信息會(huì)影響性能
    %a、%appdomain       引發(fā)日志事件的應(yīng)用程序域的名稱。
    %C、%class、%type    引發(fā)日志請(qǐng)求的類的全名,警告:會(huì)影響性能
    %exception           異常信息
    %u、%identity        當(dāng)前活動(dòng)用戶的名字,我測(cè)試的時(shí)候%identity返回都是空的。警告:會(huì)影響性能
    %l、%location        引發(fā)日志事件的名空間、類名、方法、行號(hào)。警告:會(huì)影響性能,依賴pdb文件
    %M、%method          發(fā)生日志請(qǐng)求的方法名,警告:會(huì)影響性能
    %n、%newline         換行符
    %x、%ndc             NDC(nested diagnostic context)
    %X、%mdc、%P、%properties  等介于 %property
    %property           輸出{log4net:Identity=, log4net:UserName=, log4net:HostName=} 
    %t、%thread         引發(fā)日志事件的線程,如果沒有線程名就使用線程號(hào)。
    %w、%username       當(dāng)前用戶的WindowsIdentity,類似:HostName/Username。警告:會(huì)影響性能
    %utcdate            發(fā)生日志事件的UTC時(shí)間。例如:%utcdate{HH:mm:ss,fff}
    %%                  輸出一個(gè)百分號(hào)

  額外補(bǔ)充下 PatterLayout 格式修飾符:

格式修飾符對(duì)齊最小寬最大寬說明
%20logger右對(duì)齊20如果logger名不足20個(gè)字符,就在左邊補(bǔ)空格
%-20logger左對(duì)齊20如果logger名不足20個(gè)字符,就在右邊補(bǔ)空格
%.30logger左對(duì)齊30超過30個(gè)字符將截?cái)?/td>
%20.30logger右對(duì)齊2030logger名要在20到30之間,少了在左邊補(bǔ)空格,多了截?cái)?/td>
%-20.30logger左對(duì)齊2030logger名要在20到30之間,少了在右邊補(bǔ)空格,多了截?cái)?/td>

3. 如何輸出自定義類

  自定義擴(kuò)展輸出,通過繼承 log4net.Layout.PatternLayout 和 log4net.Layout.Pattern.PatternLayoutConverter 類,使用 log4net.Core.LoggingEvent 類的方法得到了要輸出的 LogEntity 類的名稱。

  然后通過反射得到各個(gè)屬性的值,使用 PatternLayout 類 AddConverter 方法傳入得到的值,在 PatternLayoutConverter 中對(duì)其進(jìn)行處理。注意配置文件 Appender 中的 Layout type 用到的類的命名空間以及類名,要同步更改為自定義類的。詳見示例:

自定義拓展類的代碼

namespace WPFPractice
{
    public class CustomLayout : log4net.Layout.PatternLayout
    {
        public CustomLayout()
        {
            this.AddConverter("Custom", typeof(CustomConvert));
        }
    }
    public class CustomConvert : log4net.Layout.Pattern.PatternLayoutConverter
    {
        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
        {
            if (!string.IsNullOrEmpty(Option))
            {
                object obj = loggingEvent.MessageObject;
                if (obj != null)
                {
                    PropertyInfo info = obj.GetType().GetProperty(Option);
                    if (info != null)
                    {
                        object cusMsg = info.GetValue(obj, null);
                        writer.Write(cusMsg);
                    }
                }
            }
        }
    }
}

  與之對(duì)應(yīng)的,我們的配置文件也添加以下代碼:

配置文件新增代碼

<logger name="CustomLog">
		<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
		<!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
		<level value="ALL" />
		<appender-ref ref="FileAppenderCustom"></appender-ref>
	</logger>
	<appender name="FileAppenderCustom" type="log4net.Appender.RollingFileAppender">
		<file value="../../Log/CustomLog" />
		<appendToFile value="true" />
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
		<rollingStyle value="Composite" />
		<maxSizeRollBackups value="5" />
		<datePattern value="_yyyy-MM-dd'.log'" />
		<maximumFileSize value="10MB" />
		<staticLogFileName value="false" />
		<layout type="WPFPractice.CustomLayout">
			<conversionPattern value="%n==========
			%n【日志級(jí)別】%-5level
			%n【記錄時(shí)間】%date
			%n【執(zhí)行時(shí)間】[%r]毫秒
			%n【執(zhí)行線程ID】[%thread]
			%n【執(zhí)行Log分類的名稱】%logger
			%n【耗材類型名】%Custom{LabTypeName}
			%n【耗材名】%Custom{LabName}
			%n【耗材編號(hào)】%Custom{LabNumber}
			%n【是否吸頭】%Custom{IsTip}
			%n【傳入信息內(nèi)容/類型】%message
			%n==========" />
		</layout>
	</appender>

  接下來我們新建一個(gè)類 LabwareModel,并在幫助類 Log4Helper 中添加調(diào)用 CustomLog 的方法,來測(cè)試能否輸出自定義類 LabwareModel 中的內(nèi)容。

自定義類 LabwareModel

public class LabwareModel
{
    public string LabTypeName { get; set; } = "采樣管";
    public string LabName { get; set; } = "Custom_2000ul";
    public double LabNumber { get; set; } = 200;
    public int IsTip { get; set; } = 1;
}

  幫助類 Log4Helper 如下:

查看幫助類 Log4Helper

 private static readonly log4net.ILog logDefault = log4net.LogManager.GetLogger("DefaultLog");
 /// <summary>
 /// 生成默認(rèn)實(shí)例
 /// </summary>
 /// <returns></returns>
 public static LabwareModel GetLabwareModel() 
 {
     LabwareModel labwareModel = new LabwareModel();
     return labwareModel;
 }
 /// <summary>
 /// 測(cè)試自定義配置信息輸出
 /// </summary>
 public static void TestCustomLog()
 {
     var labware = GetLabwareModel();
     logCustom.Debug("這是條調(diào)試信息");
     logCustom.Info("這是條提示信息");
     logCustom.Warn("這是條警告信息");
     logCustom.Error(labware);
     logCustom.Fatal("這是條致命錯(cuò)誤信息");
 }

  在主程序中調(diào)用進(jìn)行測(cè)試:

private void Application_Startup(object sender, StartupEventArgs e)
{
    Log4Helper.TestCustomLog();
    Log4Helper.TestDefaultLog();
}

  根據(jù)上面 FileAppenderCustom 配置中 file 節(jié)點(diǎn)中的地址,在項(xiàng)目中會(huì)生成 Log 文件夾,該文件夾下會(huì)生成類似 CustomLog_2024-07-01.log 的文件。打開文件會(huì)看到輸出內(nèi)容如下:

日志輸出內(nèi)容

==========           
【日志級(jí)別】DEBUG                  
【記錄時(shí)間】2024-07-01 00:18:28,812                  
【執(zhí)行時(shí)間】[37]毫秒           
【執(zhí)行線程ID】[1]           
【執(zhí)行Log分類的名稱】CustomLog           
【耗材類型名】           
【耗材名】           
【耗材編號(hào)】           
【是否吸頭】           
【傳入信息內(nèi)容/類型】這是條調(diào)試信息           
==========
==========           
【日志級(jí)別】INFO                   
【記錄時(shí)間】2024-07-01 00:18:28,823                  
【執(zhí)行時(shí)間】[48]毫秒           
【執(zhí)行線程ID】[1]           
【執(zhí)行Log分類的名稱】CustomLog           
【耗材類型名】           
【耗材名】           
【耗材編號(hào)】           
【是否吸頭】           
【傳入信息內(nèi)容/類型】這是條提示信息           
==========
==========           
【日志級(jí)別】WARN                   
【記錄時(shí)間】2024-07-01 00:18:28,825                  
【執(zhí)行時(shí)間】[50]毫秒           
【執(zhí)行線程ID】[1]           
【執(zhí)行Log分類的名稱】CustomLog           
【耗材類型名】           
【耗材名】           
【耗材編號(hào)】           
【是否吸頭】           
【傳入信息內(nèi)容/類型】這是條警告信息           
==========
==========           
【日志級(jí)別】ERROR                  
【記錄時(shí)間】2024-07-01 00:18:28,826                  
【執(zhí)行時(shí)間】[51]毫秒           
【執(zhí)行線程ID】[1]           
【執(zhí)行Log分類的名稱】CustomLog           
【耗材類型名】采樣管           
【耗材名】Custom_2000ul           
【耗材編號(hào)】200           
【是否吸頭】1           
【傳入信息內(nèi)容/類型】WPFPractice.LabwareModel           
==========
==========           
【日志級(jí)別】FATAL                  
【記錄時(shí)間】2024-07-01 00:18:28,828                  
【執(zhí)行時(shí)間】[53]毫秒           
【執(zhí)行線程ID】[1]           
【執(zhí)行Log分類的名稱】CustomLog           
【耗材類型名】           
【耗材名】           
【耗材編號(hào)】           
【是否吸頭】           
【傳入信息內(nèi)容/類型】這是條致命錯(cuò)誤信息           
==========

  以上就是關(guān)于 Log4Net 配置詳解。

到此這篇關(guān)于Log4Net配置詳解及輸出自定義消息類示例 的文章就介紹到這了,更多相關(guān)Log4Net配置輸出自定義消息類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論