java - 用于 Log4j 2 的 Log4jNestedDiagnosticContextFilter

标签 java spring log4j log4j2

从 Spring 4.2.1 开始,Log4jNestedDiagnosticContextFilter 在 Apache 的 log4j 1.x EOL 声明之后被弃用,如下所示。

enter image description here

我找到了相应的 JIRA Ticket ( SPR-13400 ),但如何将 Log4j 2 引入 Spring 环境以执行与 Log4jNestedDiagnosticContextFilter 相同的操作?

最佳答案

我自己实现了它,方法是复制 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, "", "");
  }
}

关于java - 用于 Log4j 2 的 Log4jNestedDiagnosticContextFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433295/

相关文章:

java - android gridview, listview 或其他

java - Guice Inject Field in class NullPointerException,引入循环依赖问题

java - 用 LogBack 替换 Log4j 的问题,log4j-over-slf4j.jar 的缺点

java - log4j.xml 帮助

grails - 如何解析外部配置文件中的类引用以进行 grails war 部署?

c# - 如何将 JSON 复制并粘贴到 Eclipse 中并创建 .java?

java - 组织.apache.catalina.LifecycleException : Failed to start component

java - 自定义法国数字格式

hibernate - 3 层架构中的 Spring、Hibernate、Java EE

java - Camel ProducerTemplate 未注入(inject)注释配置