Junit 如何在每个JVM中运行jul-to-slf4j桥一次?
我希望以并行模式(多个JVM)运行Surefire,其中每个JVM必须运行:Junit 如何在每个JVM中运行jul-to-slf4j桥一次?,junit,testng,slf4j,surefire,Junit,Testng,Slf4j,Surefire,我希望以并行模式(多个JVM)运行Surefire,其中每个JVM必须运行: SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); 就在第一次测试之前。如何做到这一点?在测试套件的开头运行一些代码有多种方法 这里有4个(我相信还有更多): JUnit via和(根据中的示例改编): @RunWith(Suite.class) @SuiteClass({FirstTest.class,Sec
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
就在第一次测试之前。如何做到这一点?在测试套件的开头运行一些代码有多种方法 这里有4个(我相信还有更多):
@RunWith(Suite.class)
@SuiteClass({FirstTest.class,SecondTest.class/*,…*/,LastTest.class})
公共静态类AllWithLF4JBridgeHandler{
@课前
公共静态无效注册表RotLoggerHandlers(){
SLF4JBridgeHandler.removeHandlersFrrootLogger();
SLF4JBridgeHandler.install();
}
}
/**
*每个测试类的基类(即每个测试类都应该扩展这个类)。
*/
公共抽象类基类测试{
@套房前
公共无效注册表RotLoggerHandlers(){
SLF4JBridgeHandler.removeHandlersFrrootLogger();
SLF4JBridgeHandler.install();
}
}
/**
*测试模块。每个测试类都应该用“@Guice(TestModule.class)”注释。
*/
公共类TestModule实现该模块{
@凌驾
公用作废配置(活页夹){
SLF4JBridgeHandler.removeHandlersFrrootLogger();
SLF4JBridgeHandler.install();
}
}
/**
*每个测试类的基类(即每个测试类都应该扩展这个类)。
*/
公共抽象类基类测试{
静止的{
SLF4JBridgeHandler.removeHandlersFrrootLogger();
SLF4JBridgeHandler.install();
}
}
另一种选择是不使用
SLF4JBridgeHandler
的编程安装,而是使用java.util.logging.config文件或类(请参阅):
//将SLF4JBridgeHandler注册为j.u.l.根记录器的处理程序
handlers=org.slf4j.bridge.SLF4JBridgeHandler
系统属性分配:
java-Djava.util.logging.config.file=/path/to/logging.properties。。。
如果您事先知道日志文件的路径,这将非常有效公共类SLF4JBridgeHandlerInitializer{
公共SLF4JBridgeHandlerInitializer()引发IOException{
String loggingConfigurationString=“handlers=“+SLF4JBridgeHandler.class.getName();
InputStream InputStream=new ByteArrayInputStream(loggingConfigurationString.getBytes());
LogManager.getLogManager().readConfiguration(inputStream);
}
}
系统属性分配:
java-Djava.util.logging.config.class=package.slf4jbridgehandler初始值设定项。。。
我以前做过这件事,对我来说效果很好()最后两个选项应该初始化每个JVM实例,只要设置了适当的系统属性。感谢您的全面回答。