2016-08-18 4 views
1

웹 서버가 있고 여러 사용자가 로그인했습니다. 우리는 일반적으로 로그 레벨을 ERROR 또는 INFO 레벨로 지정합니다. 그러나 때로는 디버깅 목적으로 로그를 볼 필요가 있습니다. 런타임에 설정하려면 one way이 있지만 트래픽이 많은 경우이 프로세스가 좋지 않습니다. 중요 로그가 누락 될 수 있으며이를 유지하는 데 필요한 시간을 알 수 없습니다. 나는 log4j v1.2에 랩퍼를 작성했는데, 이는 userid가 TestUsersList에 속하면 레벨 검사를 무시한다. 따라서 특정 사용자 [스레드]에 대해서만 모든 로그를 엽니 다. 스 니펫은 아래에 있습니다.Log4j2, 런타임시 스레드 수준의 스레드 수준을 설정하십시오

public void trace(Object message) { 
    Object diagValue = MDC.get(LoggerConstants.IS_ANALYZER_NUMBER); 
    if (valueToMatch.equals(diagValue)) { // Some condition to check test number 
     forcedLog(FQCN, Level.TRACE, message, null); 
     return; 
    } 
    if (repository.isDisabled(Level.TRACE_INT)) 
     return; 
    if (Level.TRACE.isGreaterOrEqual(this.getEffectiveLevel())) 
     forcedLog(FQCN, Level.TRACE, message, null); 
} 

이제 log4j2로 이동 했으므로이 래퍼를 다시 작성하고 싶지 않습니다. log4j2가 제공하는 inbuilt 기능이 있습니까?

답변

1

필터를 사용하여 수행 할 수 있습니다. 로거를 원하는 모든 메시지를 기록하는 구성에 추가 한 다음 ThreadContextMapFilterKeyValuePair을 추가하여 기록하려는 각 사용자에 대해 추가하십시오.

그런 다음 사용자 ID를 Thread Context 코드에 넣습니다.