.net 如何使用log4net将同一应用程序的不同实例记录到不同的文件中?

.net 如何使用log4net将同一应用程序的不同实例记录到不同的文件中?,.net,log4net,.net,Log4net,我的问题类似于,但有一个更简单的背景。在我的例子中,我有一个应用程序,它可以使用不同的命令行参数同时运行两次(最多),因此每个实例都知道它的上下文 app.config文件定义了一个log4net部分来配置日志记录。这是: <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/

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

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

我不喜欢我们的做法,认为应该有更好的解决办法。有什么想法吗


谢谢。

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

请参阅

您可以为文件名定义一个模式,包括一些唯一的内容,例如时间戳或进程id