我的解决方案中有 2 个项目,都是类库类型。
- 动作:包含动作的项目,使用 White 编写(基于 MS UI 自动化的 UI 自动化框架)
- 测试:带有测试装置和测试方法的项目,使用 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。
所以,我想,情况是这样的:
- 我有一个初始化 log4net 的类
- 我启动了灯具套件
- 在测试项目中有一个运行 1st 的类,其中包含
Log.Info("...")
- 日志文件已创建
- 文本被附加到..
- 引用怀特类型的第一个动作是从测试项目中运行的
- 在这个阶段会创建一个新文件
- 我猜这是因为 White Dlls 内部还有另一个初始化 log4net 的调用,它在里面是硬编码的
知道如何在不修改 White(第 3 方 dll)的代码的情况下防止日志拆分吗?