[英]Dynamically setting a log4net property using common.logging
有没有人知道Common.Logging(for .Net)中是否有等效的设置log4net工厂适配器的属性? 通过以下方式使用log4net时我取得了很大的成功:
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="logs\Log_%property{BrokerID}.txt"/>
<appendToFile value="false"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="-1"/>
<maximumFileSize value="50GB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>
并设置属性如: log4net.GlobalContext.Properties["BrokerID"] = 10
我最终得到的文件如下所示:当使用common.logging动态连接log4net时, Log_(null).txt
。
见我的回答上一个问题。 也许它会有所帮助,也许不会。
总结一下:
Common.Logging(NET)在其网站上表示,计划在“下一个”版本中支持“上下文”。
当下一个版本(当前版本是2.0)被安排在网站上时,目前尚不清楚。 该网站称“六月”。 当前版本(2.0)是2009年4月。该网站最后更新于2009年5月(也许是宣布2.0)? “六月”是什么意思? 2009年6月? 2010年6月? 两者都来了又走了。
鉴于Common.Logging中尚未提供“上下文”支持,请查看Castle项目中的“上下文”实现(log4net实现在此处 )。 将该实现移植到Common.Logging并不困难。 风险在于最终来自Common.Logging的上下文实现可能与Castle实现不相似。
Castle“context”支持在ILog / ILogger接口上实现。 所以,而不是像这样设置上下文:
通过直接log4net访问上下文:
log4net.GlobalContext.Properties["BrokerID"] = 10;
通过日志记录抽象访问上下文:
ILog logger = Common.Logging.LogManager.GetCurrentClassLogger();
logger.GlobalContext.Properties["BrokerID"] = 10;
从具有记录器的上下文设置的角度来看,这似乎相当不错。 如果您只想在没有记录器的情况下设置上下文,可能不太好。 如果Common.Logging.LogManager知道什么抽象是“活动的”(它应该是因为抽象是通过LogManager.Adapter属性设置/获取的)。 因此,也许可以从ILog接口以及LogManager.Adapter接口获得“上下文”。
我认为通过common.logging
执行此操作并common.logging
,因为common.logging
旨在提供实际日志记录实现的外观,以便您可以在不更改应用程序代码的情况下在log4net,NLog,EntLib等之间切换(但只是改变配置)。 请注意, common.logging
为您提供了loggers( ILog
)的外观,但没有通过日志记录接收器(log4net用语中的appender)。 因此,即使您可以配置BrokerID属性,也不清楚如何在其他日志记录后端中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.