SLF4J 异常,LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.

问题:IDEA 中启动本章 SpringBoot 项目报错如下:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/software/apache-maven-3.8.6/maven-repository/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/software/apache-maven-3.8.6/maven-repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
Exception in thread “main” java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Reload4jLoggerFactory loaded from file:/D:/software/apache-maven-3.8.6/maven-repository/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar). If you are using WebLogic you will need to add ‘org.slf4j’ to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Reload4jLoggerFactory

原因分析

  • 上面已经说的很清楚了,类路径下包含了多个 SLFJ 的绑定,由详细信息可以看到是有两个 jar 下都有同名类 StaticLoggerBinder.class,导致启动的时候不知道该绑定哪一个,从而报错。

解决办法

  • 在项目依赖中删除 slf4j-reload4j-1.7.36.jar 或者 logback-classic-1.2.11.jar 其中的一个即可:

    在这里插入图片描述

    再次启动项目,成功启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您正在使用Weblogic,您需要将'org.slf4j'添加到web-inf / weblogic.xml中的prefer-application-packages中:org.slf4j.impl.log4jloggerfactory。 ### 回答2: 如果您正在使用WebLogic,则需要将'org.slf4j'添加到web-inf / weblogic.xml的prefer-application-packages中:org.slf4j.impl.log4jloggerfactory。 WebLogic是一款强大的Java应用程序服务器,用于开发和部署Java EE应用程序。它支持许多不同的应用程序框架和库,包括Slf4j。Slf4j是一个简单的日志记录抽象框架,可与许多不同的日志记录实现一起使用。 在WebLogic中使用Slf4j,您需要将Slf4j添加到web-inf / weblogic.xml的prefer-application-packages中。这是因为WebLogic使用了其自己的类加载器,它可能会与您的应用程序中使用的类加载器冲突。通过将Slf4j添加到prefer-application-packages中,您可以确保WebLogic将使用您指定的Slf4j实现。 具体来说,您需要将以下内容添加到web-inf / weblogic.xml文件中: <prefer-application-packages> <package-name>org.slf4j.*</package-name> <package-name>org.apache.logging.*</package-name> </prefer-application-packages> 此外,您还需要指定要使用的Slf4j实现。在这种情况下,您需要指定log4jloggerfactory作为Slf4j的实现。对于这样做,您需要在web-inf文件夹中的log4j.properties文件中添加以下内容: # Specify the logger for Slf4j log4j.logger.org.slf4j=DEBUG,slf4j # Specify the appender for Slf4j log4j.appender.slf4j=org.apache.log4j.ConsoleAppender log4j.appender.slf4j.layout=org.apache.log4j.PatternLayout log4j.appender.slf4j.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 这将确保WebLogic将使用Slf4j作为日志记录框架,并将使用log4jloggerfactory作为其实现。 ### 回答3: 如果您正在使用WebLogic,您需要将'org.slf4j'添加到web-inf / weblogic.xml中的prefer-application-packages中:org.slf4j.impl.log4jloggerfactory。 首先,需要明确的是,WebLogic是一款Java应用服务器,它是一个强大且普遍使用的企业级服务器,专为构建和部署大规模分布式Web应用程序、企业级应用程序和服务而设计的。 而'SLF4J'指的是Simple Logging Facade for Java(Java简单日志门面),它提供了一种统一的日志接口,以便在Java应用程序中使用不同的日志框架,而不需要对应用程序进行更改。和其它日志框架一样,例如log4j、logback和java.util.logging,SLF4J也提供了不同级别的日志信息,例如TRACE、DEBUG、INFO、WARN、ERROR和FATAL。 当您想在WebLogic服务器上使用SLF4J日志门面时,需要将org.slf4j添加到web-inf / weblogic.xml中的prefer-application-packages。这个文件可以在您的Web应用程序的WEB-INF文件夹下找到。 在文件的开头添加以下所有内容 <prefer-application-packages> <package-name>org.slf4j</package-name> </prefer-application-packages> 这将通知WebLogic服务器,在处理应用程序时优先使用SLF4J。此外,您还需要将org.slf4j.impl.log4jloggerfactory添加到此文件中的prefer-application-packages,以便在日志记录中使用log4j框架。 这样,在WebLogic服务器上使用SLF4J日志门面将变得更加容易和稳健,可以提供更好的日志资源以帮助您更好地管理和监视您的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值