在Intellij IDEA中从TestNG运行测试时的OpenEJB Logger配置

时间:2016-08-30 11:40:34

标签: logging log4j tomee openejb

从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类别的日志。

修改

有效的解决方案:

  1. 提供以下设置在“调试/运行”配置中的“JDK设置”选项卡上的VM选项中(而不是在@JvmParams注释中,因为它是在JuliLogStreamFactory之后加载的)

    -Djava.util.logging.config.file=path\to\\file.logging.properties
    
  2. 在配置文件中提供相关的文件处理程序

    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
    
  3. 不工作:

    我试图关闭日志记录的方式:

    1. System.setProperty("log4j.category.OpenEJB","off");
    2. 上一份陈述中大/小写的所有卷积
    3. 在IntelliJ Run/Debug configurations
    4. 中设置环境变量
    5. 将以下文件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
      
    6. 将名称为log4j.embedded.logging.properties的同一文件放入../../../build/ejbhome

    7. 将名称为jndi.properties的同一文件放入../../../build/ejbhome
    8. 将这3个文件放入模块dir/conf
    9. 使用Project Structure - >将IntelliJ类路径设置为上面的目录Dependencies
    10. 这两种方式都不会对线路输出产生任何影响。

1 个答案:

答案 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