当 运行 并行测试时,使用 log4net 创建的日志变得混杂
Logs created with log4net are getting mixed when running tests in parallel
我有一个使用 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 以将来自一个线程的日志放在一起?
我会避免在单元测试期间依赖外部组件进行日志记录。最好避免在单元测试期间依赖任何外部依赖项,因为这意味着您的测试不会与被测单元隔离。
如果您向被测单元提供 ILog
,而不是提供 log4net 实现,请提供可能只写入控制台的存根实现(Console.WriteLine
,等等)。在测试期间写入控制台的所有内容都将可见 post-test 并与该测试相关联。
如果您出于某种原因必须使用 log4net,请在您的 log4net 配置中使用 ConsoleAppender
而不是 FileAppender
。
我有一个使用 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 以将来自一个线程的日志放在一起?
我会避免在单元测试期间依赖外部组件进行日志记录。最好避免在单元测试期间依赖任何外部依赖项,因为这意味着您的测试不会与被测单元隔离。
如果您向被测单元提供 ILog
,而不是提供 log4net 实现,请提供可能只写入控制台的存根实现(Console.WriteLine
,等等)。在测试期间写入控制台的所有内容都将可见 post-test 并与该测试相关联。
如果您出于某种原因必须使用 log4net,请在您的 log4net 配置中使用 ConsoleAppender
而不是 FileAppender
。