我正在尝试从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 Middleware]中。创建异常:[java.util.NoSuchElementException:ThreadContext堆栈为空 在org.apache.logging.log4j.spi.DefaultThreadContextStack.pop(DefaultThreadContextStack.java:185) 在org.apache.logging.log4j.ThreadContext.pop(ThreadContext.java:391)
答案 0 :(得分:0)
我找到了解决方案,我们需要在调用pop()之前检查ThreadContext是否为空:
public void debug(String msg) {
appendContext();
logger.debug(msg);
if(!ThreadContext.isEmpty()){
ThreadContext.pop();
}
}
答案 1 :(得分:0)
ThreadContext
对象同时具有堆栈和映射对象。 ThreadContext.isEmpty()
是对地图的检查,ThreadContext.pop()
处于堆叠状态。
以下检查对我有用:
if (!ThreadContext.getImmutableStack().isEmpty()) {
ThreadContext.pop();
}