【问题标题】:How to have different instances of the same application log to different files with log4net?如何使用 log4net 将同一应用程序的不同实例记录到不同的文件?
【发布时间】:2009-12-22 09:59:11
【问题描述】:

我的问题类似于this one,但上下文更简单。在我的例子中,我有一个应用程序,它可以使用不同的命令行参数同时运行两次(最多),所以每个实例都知道它的上下文。

app.config 文件定义了一个 log4net 部分来配置日志记录。这里是:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <appender name="MainAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\NCAgent.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="DebugAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ERROR" />
    <appender-ref ref="MainAppender" />
    <level value="INFO"/>
    <appender-ref ref="DebugAppender"/>
  </root>
</log4net>

当然,我们有一个问题,两个应用程序实例可能会记录到同一个日志文件,因此在运行时其中一个实例(选择明确且明确)加载 log4net XmlElement,在那里更改日志文件的名称并使用 XmlConfigurator.Configure(XmlElement) 重载配置 log4net。

我不喜欢我们的方法,觉得应该有更好的解决方案。有什么想法吗?

谢谢。

【问题讨论】:

    标签: .net log4net


    【解决方案1】:

    您可以尝试以编程方式配置 FileAppender 文件名并附加进程 ID,或者将 FileAppender 子类化以使用基于配置的方法自动执行所述行为。

    【讨论】:

      【解决方案2】:

      this answer to a similar question.

      您可以为文件名定义一个模式,包括时间戳或进程 ID 等唯一内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多