log4net 在 appender 中使用记录器名称

log4net use logger name in appender

我正在尝试清理我们的一个应用程序当前用于其 log4net 实现的日志记录配置。使用包含 XML 文件的文件路径的参数调用应用程序。 XML 文件包含各种配置信息,其中之一是要使用的记录器名称。

目前,每个配置文件都有自己的记录器,每个记录器都有自己的附加程序。例如,我们将有:

即使这些附加程序中的每一个都具有几乎相同的配置。有数百个配置文件,app.config 的这个日志配置部分相当大。我相信我可以将其中的大部分合并为少数通用附加程序(Console、rollingFile、smtpToIT、smptpToSupport 等),并更改每个记录器以使用通用附加程序。

我如何想象这个工作的一大障碍是每个附加程序都需要在某处的配置中使用记录器的名称。我可以在 appender 中使用允许 appender 使用记录器名称的变量或设置吗?例如,RollingFileAppender 应该记录到 '\log[loggername].txt' smtpAppender 应该有一个主题 'Log for [loggername] on MM\DD\YYYY'.

我查看了 http://logging.apache.org/log4net/release/config-examples.html,相信我了解如何添加日期,但我没有看到任何有关从附加程序中访问记录器名称的信息。

无论如何都可以访问在附加程序中使用的记录器的属性吗?此外,我是否理解 log4net 是如何配置的,并在多个记录器之间重新使用附加程序?直到几周前我才听说过 log4net,所以我可能完全错了。

一直在寻找同样的东西,不幸的是,它似乎不可能开箱即用,请查看文档 here 关于模式字符串中接受的变量。

您可能必须创建自己的附加程序或格式化程序才能访问更多变量(我怀疑两者都有)。

我在其他地方找到了解决方案,在对另一个问题的回答中。不幸的是,我不记得我是在哪里找到它的,只是因为 Newtopian 的回答才回到我原来的问题。

您可以通过以下行设置全局 属性:

log4net.GlobalContext.Properties["id"] = "SomeText";

然后像我下面那样在appender中引用它:

<appender name="NewAuto2ProcessingTestFILE" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="Log/%property{id}NewAuto2ProcessingTest.txt" />
  <appendToFile value="true" />
  <maxSizeRollBackups value="10" />
  <staticLogFileName value="true" />
  <datePattern value=".yyyy-MM-dd.\t\x\t" />
  <rollingStyle value="Date" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d [%t] %-5p - %m%n" />
  </layout>
</appender>