2011-12-29 2 views
4

JAR (ejb)과 WAR가 포함 된 EAR-File에 logback을 사용하고 있습니다. Glassfish v3 Server에서 실행해야합니다. logback.xml을로드하는 것을 제외하고 모두 작동합니다. 찾을 수 없습니다. Netbeans와 함께 프로젝트를 빌드합니다. 사용 된 외부 라이브러리는 EAR의 lib-Directory에 있습니다 (어느 위치에 차이를 만들어서는 안됩니다 ...). logback.xml-File을 루트 디렉토리 나 EAR의 다른 서브 디렉토리에 넣을 계획이었습니다. Classpath는 JAR 및 WAR의 Manifest-Files에 설정됩니다. 그러나 Logback.xml을 찾을 수없는 이유가 있습니다. (빌드 ear에 logback.xml이 있습니다.)글래스 피쉬 3 + ear + logback.xml

logback.xml의 모든 위치를 tryied했습니다. WAR 또는 JAR에서도. 아무 것도 작동하지 않았습니다 ...

독립 실행 형 WAR를 사용하면 모든 것이 올바르게 작동하고 logback.xml이 발견되었습니다. (OK, 전부는 아니며 매니페스트의 클래스 패스 변경은 작동하지 않습니다 ...)

내 질문 : 이미 logback.xml이 EAR 내에서 실행 되나요?

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Created-By: 1.7.0_147-icedtea-b147 (Oracle Corporation) 
Class-Path: ./ 

희망 누군가가 나를 도울 수 :

여기 (I이 올바른 구문을 인도 표준시 것을 희망) 내 매니페스트입니다.

안부

+0

참고 : Glassfish 자체 로깅을 사용할 수 있습니다. 그렇다면 logback 대신 JDK14 slf4j 모듈이 필요합니다. 이것이 우리가 사용하는 것입니다. –

+0

slback4j와 함께 logback을 백엔드로 사용합니다. – Knox

+0

또한 로그백에 리스너를 연결하여 구성 파일의 위치를 ​​볼 수 있습니다. 이것은 당신을 도울 수 있습니다. –

답변

4

는 난 (메이븐 및 분리 모듈 config.jar 사용) EAR 내부 폭발 배포 할 간단한 분리 용기를 만드는 방법이 문제를 해결했다. 실제로 logback.xml이 lib/config.jar/logback.xml에 삽입되었습니다.

+1

그래서 기본적으로 모든 배포에 공통적 인 클래스 패스에 새 항아리를 넣습니다. 이것은 내 경험에 따라 배포 된 아티팩트 전체에서 사물을 볼 수있는 유일한 방법입니다. 응용 프로그램 서버는 클러스터되어야 할 경우 로그를 중앙화하는 데 도움이되지 않습니다. –

2

클래스 패스에 다른 jar를 넣지 않고 해결책을 찾았습니다. 1) logback.xml을 war 응용 프로그램의 클래스 경로 (예 :/src/java /)에 넣기 만하면됩니다.

@Override 
    public void contextInitialized(ServletContextEvent sce) { 
     System.out.println("Logback contextInitialized !!!!"); 
     LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
     JoranConfigurator jc = new JoranConfigurator(); 
     jc.setContext(context); context.reset(); 
     // override default configuration 
     // inject the name of the current application as "application-name" 
     // property of the LoggerContext 
     context.putProperty("application-name", "menu_dinamico"); 
     try { 
      InputStream is = getClass().getClassLoader().getResourceAsStream("logback.xml"); 
      if(is == null) { 
       System.out.println("Logback xml file non trovato"); 
      } 
      else { 
       jc.doConfigure(is); 
      } 
     } catch (JoranException ex) { 
      System.out.println("Logback contextInitialized error"); 
      StatusPrinter.print(context); 
      ex.printStackTrace(); 
     } 
    } 

지금 파일 logback.xml가 인식 : 2) 아래 냈다 같이() 응용 프로그램 이름과 같은 몇 가지 매개 변수를 설정, 결국 같이 getResourceAsStream 등을 사용하여 파일을로드 할 ServletContextListener를 사용합니다.

+0

안녕하세요 Maxqua72, 귀하의 조언을 따라 EAR 수준의 로그백 구성에서 동일한 작업을 수행했습니다. 클래스 패스 항목을 조작하거나 귀 구조를 변경하려고하면 부작용이 훨씬 더 복잡해졌습니다 !! – javapapo

+0

이 솔루션은 효과가 있었지만 시작 후에 구성이로드된다는 점에 유의하십시오. 따라서 시작하기 전에 다른 클래스 (예 : JPA, Quartz, Spring, ...)가 구성되어 있으면 배포가 완료 될 때까지 콘솔의 디버그에 기록됩니다. 결국 나는 받아 들인 대답 해결책을 찾으러 갔다. – unziberla

관련 문제