log4net在appender中使用记录器名称

时间:2015-01-08 20:39:50

标签: log4net log4net-configuration

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

目前,每个配置文件都有自己的记录器,每个记录器都有自己的appender。作为一个例子,我们将:

  • logger job1
  • logger job2
  • logger job3

  • appender consoleJob1
  • appender consoleJob2
  • appender consoleJob3
  • appender rollingFileJob1
  • appender rollingFileJob2
  • appender rollingFileJob3
  • appender smtpJob1
  • appender smtpJob2
  • appender smtpJob3

即使每个appender都具有几乎相同的配置。有了数百个配置文件,app.config的这个日志记录配置部分非常大。我相信我可以将大部分内容合并到少数通用appender(Console,rollingFile,smtpToIT,smptpToSupport等),并更改每个记录器以使用通用appender。

我可视化此工作的一个重大障碍是,每个appender都需要在某处的配置中使用记录器的名称。我是否可以在appender中使用变量或设置,允许appender使用记录器的名称?例如,RollingFileAppender应该记录到' \ log [loggername] .txt' smtpAppender应该在MM \ DD \ YYYY'上记录[loggername]的主题。

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

无论如何都要访问在appender中使用的记录器的属性?此外,我是否了解如何配置log4net,并在多个记录器之间重复使用appender?几个星期前我还没有听说过log4net,所以我可能会说错了。

2 个答案:

答案 0 :(得分:2)

我在别处找到了解决方案,回答了另一个问题。不幸的是,我不记得我发现它的位置,只是回到原来的问题,因为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>

答案 1 :(得分:1)

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

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