有没有人知道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
。
答案 0 :(得分:3)
请参阅我的answer上一个问题。也许它会有所帮助,也许不会。
总结:
Common.Logging(NET)在其website上表示,计划为“下一个”版本支持“上下文”。
website在下一个版本(当前版本为2.0)的安排时尚不清楚。该网站称“六月”。当前版本(2.0)是2009年4月。该网站最后更新于2009年5月(也许是宣布2.0)? “六月”是什么意思? 2009年6月? 2010年6月?两者都来了又走了。
鉴于Common.Logging中尚未提供“上下文”支持,请查看Castle项目中的“上下文”实现(log4net实现为here)。将该实现移植到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接口获得“上下文”。
答案 1 :(得分:2)
答案 2 :(得分:0)
我认为通过common.logging
执行此操作并不合理,因为common.logging
旨在提供实际日志记录实现的外观,以便您可以在log4net,NLog,EntLib等之间切换。无需更改应用程序代码(只需更改配置)。请注意common.logging
为您提供了记录器(ILog
)的外观,但没有通过记录接收器(log4net用语中的appender)。因此,即使您可以配置BrokerID属性,也不清楚如何在其他日志记录后端中使用它。