C#第三方日志插件Log4net的配置文件詳解
背景
最近在最一些并發(fā)方式的測(cè)試,發(fā)現(xiàn)自己之前封裝的一個(gè)日志插件報(bào)錯(cuò),盡管在寫日志時(shí)已經(jīng)通過(guò)鎖的方式進(jìn)行了優(yōu)化,但是依然無(wú)法解決并發(fā)時(shí)同一個(gè)文件同時(shí)訪問(wèn)情況,會(huì)頻繁出現(xiàn)報(bào)錯(cuò)提示xxx.txt文件正在被另一個(gè)進(jìn)程訪問(wèn)而不無(wú)法操作。
基于這個(gè)原因,暫時(shí)沒(méi)有想好很好的優(yōu)化方案,從而考慮使用第三方優(yōu)秀日志插件來(lái)解決并發(fā)情況。
本篇文章主要來(lái)分析下Log4net日志插件的配置文件信息。
占位符
在 log4net 中,占位符是在日志輸出時(shí)使用,它們會(huì)被實(shí)際的值替換。
在 .NET Core 6.0 中使用 log4net,可以在 layout 元素的 ConversionPattern 屬性中使用如下占位符:
1.%date
輸出日志時(shí)間戳,格式為 yyyy-MM-dd HH:mm:ss,fff。
2.%level
輸出日志級(jí)別,如 INFO、DEBUG、WARN、ERROR、FATAL。
3.%logger
輸出日志記錄器名稱。
4.%message
輸出日志消息。
5.%exception
輸出異常信息。
6.%identity
輸出當(dāng)前用戶(或線程)身份標(biāo)識(shí)。
7.%username
輸出當(dāng)前 Windows 用戶名。
8.%property{key}
輸出指定鍵名的 log4net 屬性值。
9.%method
輸出正在運(yùn)行的方法名。
10.%line
輸出正在運(yùn)行的方法的行號(hào)。
11.%class
輸出正在運(yùn)行的方法所在的類名。
12.%file
輸出正在運(yùn)行的方法所在的文件名。
文件鎖定
在 log4net 配置中,lockingModel 標(biāo)簽用于定義日志文件的鎖定行為,它會(huì)影響多個(gè)線程或進(jìn)程同時(shí)對(duì)日志文件進(jìn)行寫入操作時(shí)的行為。
lockingModel 標(biāo)簽有兩種常用的值可以選擇:
1.FileAppender.MinimalLock
使用這種鎖定模式時(shí),文件會(huì)被用于寫入期間短暫地鎖定。這可以確保寫入操作是原子的,但在某些情況下可能會(huì)影響性能。
2.FileAppender.ExclusiveLock
這是默認(rèn)的鎖定模式,它會(huì)獨(dú)占文件,直到寫入操作完成。這種鎖定模式會(huì)確保在寫入期間不會(huì)有其他進(jìn)程或線程可以訪問(wèn)日志文件,但可能會(huì)影響并發(fā)性能。
lockingModel 標(biāo)簽允許你根據(jù)實(shí)際情況選擇合適的鎖定行為,以確保日志文件的完整性和并發(fā)訪問(wèn)的效率。
通常情況下,默認(rèn)的 ExclusiveLock 模式能夠滿足大多數(shù)需求,但在特定情況下,你可能需要根據(jù)系統(tǒng)性能和并發(fā)訪問(wèn)的情況來(lái)選擇合適的鎖定模式。
輸出控制臺(tái)
簡(jiǎn)單輸出
1)appender標(biāo)簽
- name,自定義命名,用于后面ref使用
- type,類型,log4net.Appender.ConsoleAppender,控制臺(tái)類型
2)Layout標(biāo)簽
type,類型,log4net.Layout.PatternLayout
3)conversionPattern標(biāo)簽
value,輸出值格式,占位符,時(shí)間、線程、等級(jí)、日志器名稱、日志信息、換行
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%line" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net>
%date [%thread] %-5level %logger - %message%newline
2024-03-11 16:04:58,871 [1] DEBUG Core6TestResouce.SqlHelper - Debug message
詳細(xì)輸出
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=" 時(shí)間:%date, 日志等級(jí):%level, 日志記錄器名稱:%logger, 輸出日志信息:%message, 輸出異常信息:%exception, 身份標(biāo)識(shí):%identity, 用戶名:%username, 屬性值:%property{key}, 方法名:%method, 行號(hào):%line, 類名:%class, 文件名:%file" /> </layout> </appender> ??????? <root> <level value="DEBUG" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net>
時(shí)間:2024-03-11 16:12:49,888,
日志等級(jí):DEBUG,
日志記錄器名稱:Core6TestResouce.SqlHelper,
輸出日志信息:Debug message,
輸出異常信息:,
身份標(biāo)識(shí):,
用戶名:HLH-20220711RIK\Administrator,
屬性值:(null),
方法名:Test,
行號(hào):15,
類名:Core6TestResouce.SqlHelper,
文件名:G:\Core6TestResouce\Core6TestResouce\SqlHelper.cs
輸出到文檔
1)appender標(biāo)簽
- name,自定義命名,用于后面ref使用
- type,類型,log4net.Appender.FileAppender,文件類型
2)file標(biāo)簽
value,路徑值,logs\logfile.txt
3)appendToFile標(biāo)簽
value,值,true,追加內(nèi)容的方式到文本文檔里
4)lockingModel標(biāo)簽
2)Layout標(biāo)簽
type,類型,log4net.Layout.PatternLayout
3)conversionPattern標(biāo)簽
value,輸出值格式,占位符,時(shí)間、線程、等級(jí)、日志器名稱、日志信息、換行
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="logs\logfile.txt" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%line" /> </layout> </appender> ??????? <root> <level value="DEBUG" /> <appender-ref ref="FileAppender" /> </root> </log4net>
自定義文件名
在 .NET Core 6.0 中使用 log4net,可以通過(guò)配置文件中的 元素來(lái)設(shè)置日志文件的路徑和文件名。
1)file標(biāo)簽
- type,類型,log4net.Util.PatternString,設(shè)置時(shí)間匹配類型
- value,路徑值,logs%date{yyyyMMddHH}.log
2)下面是一個(gè)示例的 log4net 配置文件片段,演示如何將日志文件存儲(chǔ)在按時(shí)間組織的文件夾中,并自定義日志文件名
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> logs2024M3d11 <file type="log4net.Util.PatternString" value="logs\%date{yyyyMMddHH}.log" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="FileAppender" /> </root> </log4net>
文件大小
1)rollingStyle標(biāo)簽
創(chuàng)建日志文件的方式,可選值:Date(日期)、文件大小(Size、,混合(Composite)
2)maximumFileSize標(biāo)簽
單個(gè)文件大小。單位:KB|MB|GB
3)maxSizeRollBackups標(biāo)簽
最多保留的文件數(shù),設(shè)為"-1"則不限
<?xml version="1.0" encoding="utf-8" ?> <log4net> <!--定義日志級(jí)別--> <root> <level value="FATAL"/> <level value="ERROR"/> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <appender-ref ref="FATALAppender" /> <appender-ref ref="ERRORAppender" /> <appender-ref ref="WARNAppender" /> <appender-ref ref="INFOAppender" /> <appender-ref ref="DebugAppender" /> </root> <!--嚴(yán)重錯(cuò)誤日志--> <appender name="FATALAppender" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="logs\Fatal\%date{yyyyMMddHH}.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maximumFileSize value="100KB"/> <maxSizeRollBackups value="-1"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /> </layout> </appender> <!--調(diào)試日志--> <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="logs\Debug\%date{yyyyMMddHH}.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maximumFileSize value="100KB"/> <maxSizeRollBackups value="-1"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message - %line" /> </layout> </appender> </log4net>
以上就是C#第三方日志插件Log4net的配置文件詳解的詳細(xì)內(nèi)容,更多關(guān)于C# Log4net日志插件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用GPS經(jīng)緯度定位附近地點(diǎn)(某一點(diǎn)范圍內(nèi)查詢)
目前的工作是需要手機(jī)查找附近N米以內(nèi)的商戶,致想法是已知一個(gè)中心點(diǎn),一個(gè)半徑,求圓包含于圓拋物線里所有的點(diǎn),經(jīng)緯度是一個(gè)點(diǎn),半徑是一個(gè)距離,不能直接加減,下面提供C#的解決方法2013-12-12c# 實(shí)現(xiàn)打印機(jī)狀態(tài)查詢與阻塞打印
這篇文章主要介紹了c# 引用System.Management來(lái)實(shí)現(xiàn)對(duì)打印機(jī)狀態(tài)的查詢,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-05-05Unity實(shí)現(xiàn)弧形移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)弧形移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06詳解C#編程中異常的創(chuàng)建和引發(fā)以及異常處理
這篇文章主要介紹了C#編程中異常的創(chuàng)建和引發(fā)以及異常處理,文中介紹了Catch塊和Finally塊等基本的異常處理要點(diǎn),需要的朋友可以參考下2016-02-02C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐
TFTP不僅有斷點(diǎn)續(xù)傳,多用戶級(jí)別限制等功能,本文主要介紹了C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04C#連接操作 MySQL 數(shù)據(jù)庫(kù)實(shí)例(使用官方驅(qū)動(dòng))
這篇文章主要介紹了C#連接操作 MySQL 數(shù)據(jù)庫(kù)實(shí)例(使用官方驅(qū)動(dòng)),本文講解了C#中的Mysql連接方法和SQL操作方法,需要的朋友可以參考下2015-02-02C#SuperSocket的搭建并配置啟動(dòng)總結(jié)
在本篇文章里我們給大家總結(jié)了關(guān)于C#SuperSocket的搭建并配置啟動(dòng)的相關(guān)內(nèi)容,正在學(xué)習(xí)的朋友們跟著參考下。2019-05-05