2013-09-05 3 views
1

Log4J에서 logback 1.0.13에 기반한 slf4j로 코드를 마이그레이션하려고합니다.이 코드가 잘못된 이유는 무엇입니까?

어떻게하면 다음 코드를 slf4j로 변환 할 수 있습니까?

import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 

    // ... 

    ConsoleAppender stderr = new ConsoleAppender(); 
    stderr.setTarget(ConsoleAppender.SYSTEM_ERR); 
    stderr.setLayout(layout); 
    stderr.addFilter(new CurrentThreadLogFilter()); 
    stderr.setThreshold(Level.INFO); 
    stderr.activateOptions(); 

    Logger loggerRECORD = getLoggerRECORD(); 
    loggerRECORD.setLevel(Level.ALL); 
    loggerRECORD.setAdditivity(false); 
    loggerRECORD.addAppender(stderr); 

    Logger root = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); 
    root.setLevel(Level.WARN); 
    root.addAppender(stderr); 

    // ... 

    private Logger getLoggerRECORD() { 
     return LoggerFactory.getLogger("com.company.MyClass"); 
    } 

나는 setLevel, addAppendersetAdditivity 방법 대신에 사용 해야할지 모르겠어.

+0

SLF4J 로거 인터페이스는 구현과 관련하여 찾고있는 메소드를 지원하지 않는다고 생각합니다. 실제 구현 (Logback의 Logger 클래스)은 setLevel() 및 setAdditive()를 지원합니다. getLoggerRECORD() 메소드의 기능은 무엇입니까? 항상 Logback logger를 반환합니까? –

+0

@DariusX. 내 질문을 업데이트했습니다. – Stephan

답변

1

AFAIK, "순수한 SLF4J"가 되려면 코드를 통해 로거를 구성 할 수 없으며 구성해서는 안됩니다. 구성 세부 정보는 구현에 따라 다릅니다. (참조 : slf4 FAQ)

당신은 Logback을 사용하려는 특정 경우, 두 가지 옵션이 있습니다 : 코드의 외부

  1. 사용 Logback 별 구성 파일을; 또는

  2. Logger를 (LoggerFactory에서) 가져 오면 이 Logback 구현이 될 것입니다. 그럼, 그걸 던져, 그리고 SLF4J에서 이상 인터페이스를 지원하는 추가 방법을 사용하십시오.

첫 번째 (설정 파일)은 변경하기가 쉽습니다. 나는 그 길로가는 것이 좋습니다.

두 번째 경로로 이동하려면 가져 오기를 변경하여 SLF4J의 인터페이스가 아닌 Logback의 실제 클래스를 처리 할 수 ​​있습니다. LoggerFactory에 의해 Logger가 돌려 주어 졌을 때에도 캐스트를 추가 할 수 있습니다.

이렇게하면 Logger 클래스가 찾고 있던 setLevel() 및 setAdditive() 메소드를 지원합니다. 자세한 내용은 Logback javadocs을 참조하십시오.

+0

첫 번째 경로로갑니다. – Stephan

+1

logback.xml 파일이 표현력이 충분하지 않으면 Groovy를 사용할 수 있습니다. 이렇게하면 원하는대로 할 수 있습니다. –

관련 문제