log4net 多个记录器 - 属性
Posted
技术标签:
【中文标题】log4net 多个记录器 - 属性【英文标题】:log4net multiple loggers - properties 【发布时间】:2017-10-24 09:08:43 【问题描述】:log4net v. 2.0.8
我在使用 log4net 进行多次日志记录时遇到了一些问题。我正在开发一个适用于 n 台设备的应用程序,我希望每个设备都有一个日志文件。
log4net.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%envFolderPathLocalApplicationData/Foo/Device%propertyDeviceID/log.txt"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="BEGIN LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" />
<param name="Footer" value="END LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" />
<param name="ConversionPattern" value="%date [%thread] %-5level %-5class1 %-5method(%line) %message %newline" />
</layout>
<filter type="log4net.Filter.PropertyFilter">
<key value="Version" />
<stringToMatch value="1" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
这是代码
public DeviceClass(string deviceID)
InitializeComponent();
GlobalContext.Properties["DeviceID"] = deviceID;
logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
logger.Debug("Hello world");
问题是,例如,如果我有两个设备,我只会得到第一个日志文件,其中包含来自所有设备的消息。
【问题讨论】:
【参考方案1】:我不是 Log4Net 专家,但我相信日志管理器会在您第一次为给定类型/名称调用 GetLogger 时初始化记录器及其所有附加程序(隐藏的类型被转换为字符串名称)。在这种情况下,它不会为每台设备重新初始化一个。我对您的建议是尝试使用以下内容创建类型名称和设备 ID 的组合:
logger = LogManager.GetLogger($"System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullNamedeviceId");
【讨论】:
以上是关于log4net 多个记录器 - 属性的主要内容,如果未能解决你的问题,请参考以下文章