2016-08-30 2 views
3

IntelliJ에서 테스트를 실행할 때 로그 출력을 구성하는 데 문제가 있습니다.Intellij IDEA의 TestNG에서 테스트를 실행할 때 OpenEJB 로거 구성

내가하는 모든 변화는 효과가없는 것 같습니다.

나는 ApplicationComposer을 통해 @Module 주석을 사용하여 테스트를 실행합니다. 내가 OpenEJB를 범주에 대한 로그를 해제해야 구성을 설정하지만

@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("*********************************************************"); 
     } 
    } 

내가 테스트를 실행

은 와일드 카드를 사용하여 로그 라인은 콘솔에 인쇄됩니다.


편집

작업했던 솔루션 :

  1. 디버그/실행 구성의 JDK 설정 탭에서 VM 옵션에서 다음과 같은 설정을 제공합니다 (그리고 @JvmParams 어노테이션이 아니라 JuliLogStreamFactory 뒤에로드 됨)

  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. 이전 문에서 위/소문자 523,257,775,
  2. 모든 회선
  3. 설정 환경 ../../../build/ejbhome에 다음 파일 embedded.logging.properties 퍼팅 인 IntelliJ Run/Debug configurations
  4. 변수 다음과 같은 파일을 퍼팅

    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. 동일한 파일을 넣는 경우 Project Structure와 위의 디렉토리 인 IntelliJ 클래스 경로 설정 모듈 dir/conf
  7. 이러한 3 개 파일 넣기 ../../../build/ejbhome
  8. 에 이름 jndi.properties 번째 ->Dependencies

어느 방법 라인 출력에 어떤 효과가 있습니다.

답변

1

OpenEJB는 기본적으로 JUL을 사용하므로 모든 JVM 설정 java.util.logging.config에서 JUL을 구성하면됩니다.파일 을 JVM에두고 log4j가 아닌 JUL 구문을 사용하십시오 (기본적으로 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 
+0

감사합니다! JVM 설정 편집이 효과적이었습니다. 구성이 옵션에로드되기 전에 JuliLogStreamFactory 정적 초기화가로드되기 때문에 @Configuration을 통해 설정을 적용 할 수 없습니다. – alex440