3

有谁知道 Common.Logging (用于 .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

我最终得到的文件如下所示:Log_(null).txt当使用 common.logging 即时连接 log4net 时。

4

3 回答 3

3

请参阅我对上一个问题的回答。也许它会有所帮助,也许不会。

总结一下:

  1. Common.Logging (NET) 在其网站上表示,计划在“下一个”版本中支持“上下文”。

  2. 网站上没有明确下一个版本(当前版本是 2.0)的时间安排。网站上写着“六月”。当前版本(2.0)是 2009 年 4 月。该网站最后一次更新是在 2009 年 5 月(可能宣布 2.0)?“六月”是什么意思?2009 年 6 月?2010 年 6 月?两者都来了又走了。

  3. 鉴于 Common.Logging 中尚不提供“上下文”支持,请查看 Castle 项目中的“上下文”实现(log4net 实现在此处)。将该实现移植到 Common.Logging 并不难。一个风险是最终来自 Common.Logging 的上下文实现可能与 Castle 实现不同。

  4. Castle“上下文”支持在 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 接口获得。

于 2010-09-20T16:02:01.243 回答
2

我分叉了 Common.Logging 并添加了这个功能。

请参阅GitHub 项目NuGet

我还提交了一个拉取请求,将更改返回到主分支/项目。

于 2014-06-05T11:17:49.390 回答
0

我认为通过common.logging. common.logging. 请注意,这common.logging为您提供了超过 loggers ( ILog) 的外观,但没有超过 logging sinks(log4net 用语中的 appender)。因此,即使您可以配置 BrokerID 属性,也不清楚如何在其他日志记录后端使用它。

于 2010-01-23T13:32:51.937 回答