从IntelliJ运行测试时,我在配置日志输出时遇到问题。
我所做的每一项改变似乎都没有效果。
我通过@Module
使用ApplicationComposer
注释运行测试。
@Listeners(ApplicationComposerListener.class)
public class TestLogs {
private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TestLogs.class);
@Module
@Classes(cdi=true,value = {
})
public EjbModule ejbModule() throws Exception {
EjbModule ejbModule = new EjbModule(new EjbJar());
System.setProperty("openejb.home", "../../../build/ejbhome");
System.setProperty("openejb.deployments.classpath.include",".*(my_app).*");
System.setProperty("ejb.jndi.name.app", getClass().getSimpleName());
System.setProperty("ejb.jndi.name.module", ejbModule.getModuleId());
System.setProperty("log4j.category.OpenEJB","off");
return ejbModule;
}
@Test
public void testLog_LoggingIsOff() {
LOGGER.info("*********************************************************");
}
}
当我运行测试时,带有通配符的日志行会在控制台中打印出来,不过我设置的配置本应该关闭OpenEJB类别的日志。
修改
有效的解决方案:
提供以下设置在“调试/运行”配置中的“JDK设置”选项卡上的VM选项中(而不是在@JvmParams注释中,因为它是在JuliLogStreamFactory之后加载的)
-Djava.util.logging.config.file=path\to\\file.logging.properties
在配置文件中提供相关的文件处理程序
handlers = org.apache.openejb.log.FileHandler, java.util.logging.ConsoleHandler
.level = INFO
org.apache.openejb.log.FileHandler.level = FINE
org.apache.openejb.log.FileHandler.directory = logs
org.apache.openejb.log.FileHandler.prefix = my_tests_log.
org.apache.openejb.log.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level = SEVERE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL %4$s [location: %2$s] %5$s%6$s%n
不工作:
我试图关闭日志记录的方式:
System.setProperty("log4j.category.OpenEJB","off");
Run/Debug configurations
将以下文件embedded.logging.properties
添加到../../../build/ejbhome
:
log4j.rootLogger = fatal,C
log4j.category.OpenEJB = off
log4j.category.OpenEJB.server = info
log4j.category.OpenEJB.startup = info
log4j.category.OpenEJB.startup.service = warn
log4j.category.OpenEJB.startup.config = info
log4j.category.OpenEJB.hsql = info
log4j.category.CORBA-Adapter = info
log4j.category.Transaction = warn
log4j.category.org.apache.activemq = error
log4j.category.org.apache.geronimo = error
log4j.category.openjpa = error
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.layout = org.apache.log4j.SimpleLayout
将名称为log4j.embedded.logging.properties
的同一文件放入../../../build/ejbhome
jndi.properties
的同一文件放入../../../build/ejbhome
dir/conf
Project Structure
- >将IntelliJ类路径设置为上面的目录Dependencies
这两种方式都不会对线路输出产生任何影响。
答案 0 :(得分:1)
OpenEJB默认使用JUL,因此您只需将JUL配置为JVM上的任何JVM设置java.util.logging.config.file 并使用JUL语法而不是log4j(使用默认log4j不在类路径中。)
替代方案是添加app apper属性(@Configuration):
openejb.jul.forceReload=true
# custom handler impl
openejb.jul.consoleHandlerClazz = com.company.MyHandler
# then jul properties, see org.apache.openejb.util.JuliLogStreamFactory.OpenEJBLogManager for advanced usage