java.lang.StackOverflowError at org.apache.logging.log4j.util.StackLocator.getCallerClass

log4j导致栈溢出,报错内容如下:

java.lang.StackOverflowError
    at org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:125)
    at org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:55)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:42)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
... many more

正常情况下,程序启动不可能出现栈溢出,出现栈溢出的问题一般都是递归问题或者循环调用导致,结合报错信息,可以判定是日志依赖包导致的问题。重点排查项目中的日志依赖包。

1.查看项目中是否同时依赖 log4j-over-slf4j.jar 和 slf4j-log4j12.jar

排除掉 log4j-over-slf4j.jar

2.查看项目中是否同时依赖 log4j-slf4j-impl.jar 和 log4j-to-slf4j.jar

排除掉 log4j-to-slf4j.jar

3.查看项目中是否同时依赖 jcl-over-slf4j.jar 和 slf4j-jcl.jar

排除掉 jcl-over-slf4j.jar

以上三组jar包会出导致循环调用问题,根据具体情况,排除掉即可。

如果觉得还不错,给个赞呗 !O(∩_∩)O

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。