使用log4net创建的日志在并行运行测试时会变得混杂

时间:2017-07-20 16:20:03

标签: nunit log4net log4net-configuration

我有一个使用log4net的NUnit测试并生成一个不错的日志,如下所示:

[2017-07-20 INFO] Test children 00: Started
[2017-07-20 INFO] Test children 00: Log line 1
[2017-07-20 INFO] Test children 00: Log line 2
[2017-07-20 INFO] Test children 00: Log line 3
[2017-07-20 INFO] Test children 00: Completed

如果我创建了这个测试的多个子节点(使用TestCaseSource)并且并行运行它们,那么日志会变得很难看,来自不同测试子节点的行会混合在一起。

我希望看到这样的内容(请注意来自测试儿童的所有日志归为一组)

[2017-07-20 INFO] Test children 00: Started
[2017-07-20 INFO] Test children 00: Log line 1
[2017-07-20 INFO] Test children 00: Log line 2
[2017-07-20 INFO] Test children 00: Log line 3
[2017-07-20 INFO] Test children 00: Completed
[2017-07-20 INFO] Test children 01: Started
[2017-07-20 INFO] Test children 01: Log line 1
[2017-07-20 INFO] Test children 01: Log line 2
[2017-07-20 INFO] Test children 01: Log line 3
[2017-07-20 INFO] Test children 01: Completed

实际上我得到这样的东西(请注意来自不同测试儿童的日志混合)

[2017-07-20 INFO] Test children 00: Started
[2017-07-20 INFO] Test children 01: Started
[2017-07-20 INFO] Test children 00: Log line 1
[2017-07-20 INFO] Test children 01: Log line 1
[2017-07-20 INFO] Test children 00: Log line 2
[2017-07-20 INFO] Test children 01: Log line 2
[2017-07-20 INFO] Test children 01: Log line 3
[2017-07-20 INFO] Test children 00: Log line 3
[2017-07-20 INFO] Test children 01: Completed
[2017-07-20 INFO] Test children 00: Completed

有没有办法配置log4net以保持日志来自一个线程?

1 个答案:

答案 0 :(得分:0)

我避免在单元测试期间依赖外部组件进行日志记录。最好避免在单元测试期间依赖任何外部依赖关系,因为这意味着您的测试不会被隔离到被测单元。

如果您正在为正在测试的设备提供ILog,而不是提供log4net实现,请提供可能只写入控制台(Console.WriteLine等)的存根实现。在测试期间写入控制台的所有内容都将在测试后显示并与该测试相关联。

如果由于某种原因必须使用log4net,请在log4net配置中使用ConsoleAppender而不是FileAppender