간단한 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:out
과 std:err
을 자체 로깅 프레임 워크로 래핑한다는 것을 이해하며, System.out.println
출력이 손실되는 일종의 버퍼링이 있다고 가정합니다.
내 WAR에 logging.properties
파일이없고 표준 설정을 수정하지 않았습니다. 로깅과 관련하여 (standalone-full.xml
)를 사용하고 있습니다. 예전에 logging.properties
파일을 가지고 있었지만이 파일을 삭제 했으므로 모두System.out.println
이이 question에 설명 된대로 손실되었습니다. logging.properties
파일이 제거되면 일부System.out.println
출력이 예외가 발생하기 직전, 즉 가장 필요할 때를 제외하고는 적어도 보입니다.
내 질문은 :
- 이유는이 출력을 잃고 오전 어떻게
System.out.println
항상server.log
에 포함되어 있는지 확인 할 수 있습니까? - JBoss에서 로깅 상황을 단순화하기위한 팁은 무엇입니까? 모든 것이 매우 복잡하고 문서화되지 않았습니다.
JBoss에 여러 응용 프로그램이 배포되어 있습니다. 일부 앱에서는 특정 로거 프레임 워크를 사용하지 않고 System.out에서만 작업합니다. 나는 그런 문제에 직면 한 적이 없다. Eclipse와 같은 일부 IDE에서 (원격) 코드 디버깅을 시도 할 수 있습니까? – RAS
로깅 프레임 워크 SLF4J를 logback 또는 log4j로 사용하는 것이 좋습니다 – mhshimul
@RAS는 JBoss 6.x로 태그를 붙였습니다 (실제로 6.2입니다). –