Specflow 在 AfterTestRun 中丢失 log4net appender

Specflow loses log4net appenders in AfterTestRun

我想记录我的 Specflow 输出并使用 log4net 进一步登录到一个文件中。 日志附加程序通过 app.config 配置并以优先级 0 加载到 BeforeTestRun 中。之后我可以登录文件和 LogManager.GetRepository().GetAppenders() 包含所有 3 个附加程序。

一旦到达 AfterTestRun,LogManager.GetRepository().GetAppenders() 包含 0 个附加程序。

[BeginTestRun(0)]
public void beginTestRun(){
   log4net.Config.XmlConfigurator.Configure();
   //LogManager.GetRepository().GetAppenders() contains 3 appenders
}

[AfterTestScenario(MaxPriority)]
public void afterScenario(){
    //LogManager.GetRepository().GetAppenders() contains 3 appenders
}

[AfterTestRun(0)]
public void afterTestRun(){
    //LogManager.GetRepository().GetAppenders() contains 0 appenders
    //does reinitiate all loggers, but configuration of object can get lost
    log4net.Config.XmlConfigurator.Configure();
}

有没有办法在 AfterTestRun 中也保留附加程序和日志配置?或者为什么会丢失?它也会影响其他静态成员吗​​?

From the documentation:

As most of the unit test runners do not provide a hook for executing logic once the tests have been executed, the [AfterTestRun] event is triggered by the test assembly unload event.

卸载测试程序集时,加载的配置也会随之消失。如果要用这种方式登录,需要重新加载配置。