2017-08-01 16 views
2

Spring 4.2.1から、Log4jNestedDiagnosticContextFilterはlog4j 1.xのApacheのEOL宣言の後に推奨されていません。Log4jのLog4jNestedDiagnosticContextFilter 2

enter image description here

私は、対応するJIRAチケット(SPR-13400)を発見したが、どのように私はLog4jNestedDiagnosticContextFilterと同じ操作を行うために春の環境にLog4jの2持ち込むことができますか?

答えて

0

Log4jNestedDiagnosticContextFilterをコピーしてLoggerをLog4j 2に変更してNDCThreadContextに変更して自分で実装しました。

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.logging.log4j.ThreadContext; 
import org.springframework.web.filter.AbstractRequestLoggingFilter; 

import javax.servlet.http.HttpServletRequest; 

public class CustomRequestLoggingFilter extends AbstractRequestLoggingFilter { 

    protected final Logger log4jLogger = LogManager.getLogger(getClass()); 

    @Override 
    protected void beforeRequest(HttpServletRequest request, String message) { 
    if (log4jLogger.isDebugEnabled()) { 
     log4jLogger.debug(message); 
    } 
    ThreadContext.push(getNestedDiagnosticContextMessage(request)); 
    } 

    @Override 
    protected void afterRequest(HttpServletRequest request, String message) { 
    ThreadContext.pop(); 
    if (ThreadContext.getDepth() == 0) { 
     ThreadContext.removeStack(); 
    } 
    if (log4jLogger.isDebugEnabled()) { 
     log4jLogger.debug(message); 
    } 
    } 

    protected String getNestedDiagnosticContextMessage(HttpServletRequest request) { 
    return createMessage(request, "", ""); 
    } 
} 
関連する問題