2017-08-01 34 views
2

從Spring 4.2.1開始,Log4jNestedDiagnosticContextFilter在Apache的針對log4j 1.x的EOL聲明被棄用,如下所示。Log4j的Log4jNestedDiagnosticContextFilter 2

enter image description here

我已經找到了相應的JIRA票(SPR-13400),但我怎麼可以把Log4j的2到Spring環境做一樣的Log4jNestedDiagnosticContextFilter

回答

0

我自己通過複製Log4jNestedDiagnosticContextFilter來實現它,並使記錄器適應Log4j 2並將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, "", ""); 
    } 
}