在我和第三方dll中配置log4net时,log4net会创建2个日志文件而不是预期的日志文件

时间:2013-01-27 05:53:52

标签: log4net log4net-configuration white

我的解决方案中有2个项目,都是类库类型。

  1. 操作:包含使用White编写的操作的项目(基于MS UI Automation的UI自动化框架)
  2. 测试:使用测试夹具和测试方法的项目,使用MbUnit
  3. 我决定使用log4net为两个项目添加日志记录。我正在使用的log4net配置如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString"
              value="c:/AutomationLog/Automation_%date{dd.MM.yy_HH.mm.ss}.log" />
        <appendToFile value="false" />
        <rollingStyle value="Once" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="10MB" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%-5level %date{HH:mm:ss,fff} %logger - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="RollingLogFileAppender" />
      </root>
      <logger name="root">
        <level value="OFF" />
      </logger>
    </log4net>
    

    我希望每次运行时创建一个文件(每个夹具套件运行一个)。但是创建了两个文件:

      

    Automation_27.01.13_07.33.53.log

         

    Automation_27.01.13_07.33.53.log.1

    经过调查,我发现每次在同一个地方将日志分配到第二个文件中 - 当调用包含来自White的类型的操作时。看起来好像是由于White也在内部使用log4net。

    所以,我猜,情况是这样的:

    1. 我有一个初始化log4net
    2. 的类
    3. 我开始使用灯具套件
    4. 在测试项目中,有一个运行1st的类,其中包含Log.Info("...")
    5. 创建日志文件
    6. 文字被追加到......
    7. 引用White的类型的第一个动作是从测试项目
    8. 运行的
    9. 在此阶段创建一个新文件
    10. 我想这是因为White Dlls里面还有另一个初始化log4net的调用,它内部是硬编码的
    11. 知道如何在不修改White(第三方dll)代码的情况下防止日志分裂?

1 个答案:

答案 0 :(得分:0)

我通过重命名配置文件解决了这个问题,白色查找了log4net.config名称。但我仍然没有得到答案 - 如何强制log4net只被初始化一次,并跳过未来的尝试。