2017-08-01 4 views
2

À partir du printemps 4.2.1, le Log4jNestedDiagnosticContextFilter est obsolète suite à la déclaration EOL d'Apache pour log4j 1.x comme indiqué ci-dessous.Log4jNestedDiagnosticContextFilter pour Log4j 2

enter image description here

J'ai trouvé le billet JIRA (SPR-13400) correspondant, mais comment puis-je apporter Log4j 2 dans l'environnement de printemps pour faire la même chose que le Log4jNestedDiagnosticContextFilter?

Répondre

0

je moi-même mis en œuvre en copiant le Log4jNestedDiagnosticContextFilter et d'adapter l'enregistreur à Log4j 2 et changer NDC-ThreadContext.

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, "", ""); 
    } 
}