Java ThreadContext.pop()抛出NoTouchElementException:ThreadContext堆栈在log4j-2.3中为空
我正在尝试从log4j-1.x升级到log4j-2.3,在运行时出现以下错误。我遗漏了什么Java ThreadContext.pop()抛出NoTouchElementException:ThreadContext堆栈在log4j-2.3中为空,java,log4j2,Java,Log4j2,我正在尝试从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服务S
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:应用程序[DBIN中间件]中servlet[MWServlet]的一个服务方法引发异常。创建的异常:[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是否为空:
我找到了解决方案,在对其调用pop()之前,我们需要检查ThreadContext是否为空:
ThreadContext
对象既有堆栈对象又有映射对象。ThreadContext.isEmpty()
是对映射的检查,而ThreadContext.pop()则是对堆栈的检查
以下支票对我有效:
if (!ThreadContext.getImmutableStack().isEmpty()) {
ThreadContext.pop();
}
ThreadContext
对象既有堆栈对象又有映射对象。ThreadContext.isEmpty()
是对映射的检查,而ThreadContext.pop()则是对堆栈的检查
以下支票对我有效:
if (!ThreadContext.getImmutableStack().isEmpty()) {
ThreadContext.pop();
}
您是否在同一线程上向ThreadContextStack添加了一些内容?我尝试添加了一些内容,但仍然出现相同的错误您是否在同一线程上向ThreadContextStack添加了一些内容?我尝试添加了一些内容,但仍然出现相同的错误