2017-01-28 1 views
1

간단한 System.out.printf/System.out.println 문을 사용하여 JBoss 로깅을 수행합니다 (JBoss EAP 6.2에 배포 중입니다). 나는 예외가 발생했을 때 예외를 던지기 직전에 println 메시지를 잃는 경향이 있다는 것을 알아 챘다. 이로 인해 예외를 디버깅 할 수 없습니다.로깅 System.out.println이 JBoss에서 손실 됨

System.out.println("foo"); 
int i = 0; if (i==0) throw new RuntimeException(); 
... 

실제로

,합니다 (int i = 0; if (i==0) 부분은, 그렇지 않으면 불평 것이다 컴파일러를 침묵 그냥)이 코드가 실행 :

이를 확인하려면, 내 WAR에 다음 코드를 넣어 , 서버 로그 파일 (standalone/log/server.log)에서 나는 foo을 전혀 볼 수 없습니다. 나는 예외의보고를 보았으나 예외는 없다.

동일한 메시지를 반복적으로 100 번 인쇄하여 예외를 던지기 전에 System.out.flush()을 명시 적으로 수행하고 java.util.concurrent.TimeUnit.MINUTES.sleep(1)을 시도했습니다. 변경된 사항이 없으며 server.log에 출력이 전혀 표시되지 않습니다. 예외 추적 만 표시되지만 위에는 foo이 표시되지 않습니다.

나는 JBoss가 std:outstd:err을 자체 로깅 프레임 워크로 래핑한다는 것을 이해하며, System.out.println 출력이 손실되는 일종의 버퍼링이 있다고 가정합니다.

내 WAR에 logging.properties 파일이없고 표준 설정을 수정하지 않았습니다. 로깅과 관련하여 (standalone-full.xml)를 사용하고 있습니다. 예전에 logging.properties 파일을 가지고 있었지만이 파일을 삭제 했으므로 모두System.out.println이이 question에 설명 된대로 손실되었습니다. logging.properties 파일이 제거되면 일부System.out.println 출력이 예외가 발생하기 직전, 즉 가장 필요할 때를 제외하고는 적어도 보입니다.

내 질문은 :

  1. 이유는이 출력을 잃고 오전 어떻게 System.out.println 항상 server.log에 포함되어 있는지 확인 할 수 있습니까?
  2. JBoss에서 로깅 상황을 단순화하기위한 팁은 무엇입니까? 모든 것이 매우 복잡하고 문서화되지 않았습니다.
+0

JBoss에 여러 응용 프로그램이 배포되어 있습니다. 일부 앱에서는 특정 로거 프레임 워크를 사용하지 않고 System.out에서만 작업합니다. 나는 그런 문제에 직면 한 적이 없다. Eclipse와 같은 일부 IDE에서 (원격) 코드 디버깅을 시도 할 수 있습니까? – RAS

+0

로깅 프레임 워크 SLF4J를 logback 또는 log4j로 사용하는 것이 좋습니다 – mhshimul

+0

@RAS는 JBoss 6.x로 태그를 붙였습니다 (실제로 6.2입니다). –

답변

0

또 다른 logging.properties 파일이 숨어 있습니다. 일단 내가 그것을 제거하면 server.log 흔적에있는 모든 System.out.println 메시지를 다시 볼 수있었습니다. logging.properties 파일의 존재가 일반 출력 STD:OUT 출력으로 왜 엉망이되는지 분명하지 않습니다.

업데이트

로깅 서브 시스템 내 구성 요소의 처리를 사용하지 않도록 내 META-INF 디렉토리에 jboss-deployment-structure.xml 파일을 추가하려고 할 제임스 R. 퍼킨스에 의해 제안을 따르도록 시도하고 다음과 같은 추가 :

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
    <exclusions> 
    <module name="org.jboss.logging"/> 
    <module name="org.apache.log4j"/> 
    </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

& hellip; 이것은 작동하지 않았다. System.out.println 출력이 여전히 손실되었습니다. 따라서 유일한 해결 방법은 logging.propertieslog4j.xml 개의 파일을 제거하는 것입니다.James R. Perkins 덕분에 JBoss EAP에서 실제로 bug 일 수 있습니다. 6.2.0

+1

사용자는 배포 중에 자체 로깅 구성을 포함 할 수 있습니다. logging.properties 파일을 제거하고 싶지 않으면'jboss-deployment-descriptor.xml'을 추가하고 로깅 서브 시스템을 배치 처리에서 제외하십시오. –

+0

@ JamesR.Perkins "배포를 처리하는 데 로깅 하위 시스템을 제외하려면"여전히'server.log'에 일반 오래된 System.out.println 메시지가 표시됩니까? –

+0

예. 그것들은 로거에 싸여 있으며 배포는 서버 수준 로깅 컨텍스트를 사용합니다. –