2011-08-09 5 views
3

이것은 내가하려고하는 것입니다 :java.util.logging에서 사용자 정의 로그 처리기를 사용하는 방법?

Logger logger = LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
Handler handler = new StreamHandler(stream, new SimpleFormatter()); 
logger.addHandler(handler); 
org.slf4j.LoggerFactory.getLogger("com.example").info("foo"); 
logger.removeHandler(handler); 
assert stream.toString().contains("foo"); 

SLF4J와 JUL이 혼합 된 것입니다. stream는 스크립트 끝에서 비어 있습니다. 왜?

답변

0

StreamHandler는 레코드가 포맷 된 경우에만 'head'포맷터를 씁니다. 조건부로 처리기가 닫히면 'head'및 'tail'이 기록됩니다. 그 모두는 StreamHandler에 의해 소비 된 LogRecord가 없음을 나타내는 것 같습니다. SimpleFormatter는 head와 tail 모두에 빈 문자열을 사용하므로 문제 해결에 도움이되지 않습니다.

  1. 모든 로거, 어 펜더 및 핸들러의 레벨/우선 순위를 확인하고 올바르게 설정되었는지 확인하십시오.
  2. LogManager 대신 Logger.getLogger (Logger.GLOBAL_LOGGER_NAME)를 사용하십시오.
  3. static final reference을 사용하여 로거를 보관하십시오.
  4. 처리기를 종료하십시오.
  5. XMLFormatter를 사용하면 head 및 tail 출력이 있기 때문에 문제를 해결하는 데 도움이됩니다.
  6. 읽어보기 slf4j + java.util.logging: how to configure?
관련 문제