运行 在 Intellij IDEA 中从 TestNG 进行测试时的 OpenEJB 记录器配置

OpenEJB Logger configuration when running tests from TestNG in Intellij IDEA

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

我所做的每项更改似乎都没有效果。

我 运行 通过 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. 前面语句中upper/lower个案例的所有卷积
  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 -> Dependencies
  9. 将 IntelliJ 类路径设置为上面的目录

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

OpenEJB 默认使用 JUL,因此您只需要像在任何 JVM 设置 java.util.logging.config.file JVM 上一样配置 JUL,并使用 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