当通过另一个应用程序启动Process时,Log4Net不会记录

时间:2016-11-14 13:51:12

标签: c# log4net

我有两个应用程序( A B )。 A 使用Process.Start()实例化 B 。两者都使用log4net将数据记录到两个不同的XML文件( File1 File2 )。

  

B 直接实例化时,它会记录到该文件中。但是当它   通过 A 实例化,它不会将信息记录到文件中。

以下是我的配置:

<log4net>
    <logger name="A.Program" additivity="true">
      <level value="INFO"/>
      <appender-ref ref="ARollingFileAppender"/>
    </logger>

    <logger name="B.Program" additivity="true">
      <level value="INFO"/>
      <appender-ref ref="BRollingFileAppender"/>
    </logger>

    <appender name="ARollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="logs/File1.xml"/>
      <appendToFile value="true"/>
      <datePattern value="yyyyMMdd"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="100"/>
      <maximumFileSize value="10MB"/>
      <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
        <locationInfo value="true"/>
      </layout>
    </appender>

    <appender name="BRollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="logs/File2.xml"/>
      <appendToFile value="true"/>
      <datePattern value="yyyyMMdd"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="100"/>
      <maximumFileSize value="10MB"/>
      <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
        <locationInfo value="true"/>
      </layout>
    </appender>    
  </log4net>

A 实例化后,我尝试执行 B 的log4net调试。它显示以下内容,没有错误:

log4net:打开文件[ File2的位置]追加[True]

但是当我在同一位置检查File2时,它没有写入任何日志。

2 个答案:

答案 0 :(得分:0)

您需要添加:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

到appenders。这将对文件进行最小程度的锁定。但是,如果您记录很多,这将影响您的性能。在这种情况下,最好为每个应用程序提供自己的日志文件。

但是,如果您希望每个应用程序都记录到自己的日志文件,您还可以从配置中删除其他应用程序的appender。

答案 1 :(得分:0)

  

配置我使用程序集属性...

我怀疑那是你的问题。您没有指定属性是在项目A还是项目B(或两者)中定义,而是从the documentation注意到:

  

使用属性可以更清晰地定义从何处加载应用程序的配置。

     

然而值得注意的是,属性纯粹是被动的。它们仅供参考。

     

因此,如果使用配置属性,则必须调用log4net以允许它读取属性。对LogManager.GetLogger的简单调用将导致调用程序集上的属性被读取和处理。

     

因此,必须在应用程序启动期间尽早进行日志记录调用,当然在加载和调用任何外部程序集之前。

在这种情况下,使用XmlConfiguration会更容易。