0

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

  1. 动作:包含动作的项目,使用 White 编写(基于 MS UI 自动化的 UI 自动化框架)
  2. 测试:带有测试装置和测试方法的项目,使用 MbUnit

我决定为这两个项目添加使用 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>

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

自动化_27.01.13_07.33.53.log

自动化_27.01.13_07.33.53.log.1

经过调查,我发现日志每次都在同一个地方被吐到第二个文件中——当调用包含 White 类型的操作时。看起来这是因为 White 在内部也使用 log4net。

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

  1. 我有一个初始化 log4net 的类
  2. 我启动了灯具套件
  3. 在测试项目中有一个运行 1st 的类,其中包含Log.Info("...")
  4. 日志文件已创建
  5. 文本被附加到..
  6. 引用怀特类型的第一个动作是从测试项目中运行的
  7. 在这个阶段会创建一个新文件
  8. 我猜这是因为 White Dlls 内部还有另一个初始化 log4net 的调用,它在里面是硬编码的

知道如何在不修改 White(第 3 方 dll)的代码的情况下防止日志拆分吗?

4

1 回答 1

0

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

于 2013-01-29T19:37:02.070 回答