log4net在appender中使用记录器名称

log4net在appender中使用记录器名称,log4net,log4net-configuration,Log4net,Log4net Configuration,我正在尝试清理我们的一个应用程序目前用于其log4net实现的日志配置。使用包含XML文件文件路径的参数调用应用程序。该XML文件包含各种配置信息,其中一个是要使用的记录器名称 目前,每个配置文件都有自己的记录器,每个记录器都有自己的附加器。例如,我们将: 记录器作业1 记录器作业2 记录器作业3 及 附件控制台JOB1 附件控制台JOB2 附件控制台JOB3 appender rollingFileJob1 appender rollingFileJob2 appender rollin

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

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

  • 记录器作业1
  • 记录器作业2
  • 记录器作业3

  • 附件控制台JOB1
  • 附件控制台JOB2
  • 附件控制台JOB3
  • appender rollingFileJob1
  • appender rollingFileJob2
  • appender rollingFileJob3
  • 追加器smtpJob1
  • appender smtpJob2
  • 追加器smtpJob3
尽管每个附加器的配置几乎相同。app.config的这个日志配置部分有数百个配置文件,相当大。我相信我可以将其中的大部分合并为几个通用appender(控制台、rollingFile、smtpToIT、smtptosupport等),并将每个记录器更改为使用通用appender

我如何将其可视化的一个大障碍是,每个appender都需要在配置中的某个地方使用记录器的名称。在appender中是否有允许appender使用记录器名称的变量或设置?例如,RollingFileAppender应该登录到“\log[loggername].txt”,smtpAppender的主题应该是“MM\DD\YYYY上[loggername]的日志”

我看了一下,相信我理解了如何添加日期,但我没有看到任何关于从appender中访问记录器名称的内容


是否仍然可以访问appender中正在使用的记录器的属性?此外,我是否理解如何配置log4net,在多个记录器之间重复使用appender?直到几周前我才听说过log4net,所以我可能在这一点上完全错了。

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


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

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

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

log4net.GlobalContext.Properties["id"] = "SomeText";
然后在附录中引用它,如下所示:

<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>


嘿,我上次确实找到了答案。我不记得在哪里,但我在自己的答案中复制了实现中的重要部分。在收到你的答复通知之前,我忘了我已经发布了这个。新链接这可能会在多线程应用程序中对您造成影响,但如果ID不经常更改,这可能会造成影响。同意,在我们的情况下,它可以正常工作,因为每个作业都会创建应用程序的新实例。它是一个基本应用程序,以XML文件作为输入,XML文件分步骤构造,每个步骤都包含有关特定操作的信息。所以,一项工作可能是从FTP服务器x获取文件,第2步解密,第3步将其解析为数据库,第4步运行存储过程,第5步从查询创建平面文件,第6步加密文件,第7步将新文件发送到另一个FTP站点。每个作业都有自己的应用程序实例,因此没有线程复杂性。