【问题标题】:OpenEJB Logger configuration when running tests from TestNG in Intellij IDEA在 Intellij IDEA 中从 TestNG 运行测试时的 OpenEJB Logger 配置
【发布时间】:2016-08-30 11:40:33
【问题描述】:

从 IntelliJ 运行测试时,我在配置日志输出时遇到问题。

我所做的每一个改变似乎都没有效果。

我通过ApplicationComposer 使用@Module 注释运行测试。

    @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. 在 Debug/Run 配置的 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
    

不工作的东西:

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

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

  6. 将名称为jndi.properties 的相同文件放入../../../build/ejbhome
  7. 把这3个文件放到模块dir/conf
  8. 使用Project Structure 将 IntelliJ 类路径设置为上述目录 -> Dependencies

这两种方式都不会影响线路输出。

【问题讨论】:

    标签: logging log4j apache-tomee openejb


    【解决方案1】:

    OpenEJB 默认使用 JUL,因此您只需将 JUL 配置为在任何 JVM 设置 java.util.logging.config.file 在 JVM 上并使用 JUL 语法而不是 log4j 之一(通过默认 log4j 不在类路径中)。

    另一种方法是添加应用程序编辑器属性(@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
    

    【讨论】:

    • 谢谢!编辑 JVM 设置确实有效。我无法通过@Configuration 进行设置,因为在将配置加载到选项之前加载了 JuliLogStreamFactory 静态初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多