我正在尝试从log4j-1.x升级到log4j-2.3,并在运行时出现以下错误。我有什么想念的吗?

public void debug(String msg) {
    appendContext();
    logger.debug(msg);
    ThreadContext.pop();
}



  [5/25/16 20:08:16:748 SGT] 0000006a ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper服务SRVE0068E:应用程序中Servlet [MWServlet]的一种服务方法引发了异常[DBIN中间件]。创建的异常:[java.util.NoSuchElementException:ThreadContext堆栈为空
      在org.apache.logging.log4j.spi.DefaultThreadContextStack.pop(DefaultThreadContextStack.java:185)
      在org.apache.logging.log4j.ThreadContext.pop(ThreadContext.java:391)

最佳答案

我找到了解决方案,在调用pop()之前,我们需要检查ThreadContext是否为空:

public void debug(String msg) {
    appendContext();
    logger.debug(msg);
    if(!ThreadContext.isEmpty()){
        ThreadContext.pop();
    }
}

07-28 13:36