当前位置: 首页 > 面试题库 >

将log4j2与slf4j一起使用:java.lang.StackOverflowError

楚和悌
2023-03-14
问题内容

因此,我尝试按照其网站上的此(非Maven实现)和要求将slf4j添加到log4j。并尝试使用此代码

public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Main.class);
        logger.info("test");
    }

并将以下内容添加到我的库中

  • log4j-api-2.3.jar
  • log4j-core-2.3.jar
  • log4j-sl4j-impl-2.3.jar
  • log4j-to-sl4j-2.3.jar
  • slf4j-api-1.7.12.jar

当我尝试运行它时,出现以下错误

Exception in thread "main" java.lang.StackOverflowError
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
    at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:964)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:40)
    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:47)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    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:47)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)...

知道我要去哪里错了吗?


问题答案:

您正在使用log4j-slf4j-impl-2.3.jar和创建一个调用循环log4j-to-slf4j-2.3.jar

log4j-slf4j-impl-2.3.jar 是将slf4j调用发送到log4j的适配器的实现。

log4j-to-slf4j-2.3.jar正在将log4j呼叫发送回slf4j。 删除此一个



 类似资料:
  • 我一直在尝试遵循这个网站和其他网站上的食谱,了解如何将log4j2 FileAppender实例添加到使用SLF4J API进行整体日志记录的类中,但我运气不佳。有人能告诉我下面的代码哪里出错了吗? assertTrue语句通过,因此文件由FileAppender创建,但assertEquals失败,因为日志线的长度为零(即日志文件没有内容)。 有什么想法吗?

  • 我开始将与一起使用,但问题如下。pom文件中我错了什么或缺少什么? 我的pom.xml: 我非常简单的代码:

  • SLF4J强制应用程序记录字符串。Log4J2 API支持记录任何CharSequence(如果您想记录文本),但也支持按原样记录任何对象。 Log4j 2 API支持日志记录消息对象、Java 8 lambda表达式和无垃圾日志记录(它在日志记录CharSequence对象时避免创建vararg数组和字符串)。

  • 问题内容: 我习惯在普通的log4j上使用。现在,我切换到,无法使附加程序正常工作。 下面的附加程序可以正常工作。但是永远不会创建的日志文件。为什么? 问题答案: 该标记缺少属性。

  • 问题内容: 我们已经迁移了所有代码,以使用slf4 API来使用通用API,但是现在我们正在考虑从log4j 1.x升级到log4j2.x。如果我们使用slf4j API和log4j2作为实现,是否能够使用log4j2的所有功能? 问题答案: Log4j2 API比SLF4J API丰富,并且 无法 通过SLF4J访问许多Log4j2 API功能。有关详情,请参见下文。 Log4j2实现的功能(如

  • 问题内容: SLF4J的“ Hello World”示例对我不起作用。我猜这是因为我在类路径中添加了slf4j-log4。我应该直接配置log4j以便您好工作吗? 更新 :我添加了log4j初始化,但仍然无法正常工作: 我得到: 问题答案: 如果要使用,则需要在类路径中使用以下文件: slf4j-api-1.6.1.jar slf4j-simple-1.6.1.jar 如果要使用和,则需要在类路径