另一种导致的原因:java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/

本文详细介绍了Java.lang.NoSuchMethodError错误产生的原因及解决方案,主要涉及到SLF4J版本不一致或重复jar包的问题。通过调整Maven工程中slf4j-log4j12依赖的版本,可以有效解决此问题。
部署运行你感兴趣的模型镜像

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)

网上搜索到很多的原因是由于slf4j版本不一致,或者有重复jar的情况导致的。

在Maven工程里面,如果pom.xml里面指定了版本号,比如:


<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
<scope>provided</scope>
</dependency>


而Maven下载的最高版本或者其希望的版本是更高的版本比如1.7.1,(可以通过查看C:\Users\...\.m2\repository\org\slf4j\slf4j-log4j12)或者命令mvn -dependency:tree查看列表

则需要指定版本号为最高的版本:

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.1</version>
<scope>provided</scope>
</dependency>


您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

### 问题分析 `java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()` 是一个常见的运行时错误,通常发生在 SLF4J 的 API 和其绑定实现之间的版本不兼容。该错误表明 JVM 在运行时找不到某个类中的特定方法,通常是由于不同版本的库之间接口发生了变化。 在 SLF4J 中,`StaticLoggerBinder` 是 `slf4j-api` 与具体日志实现(如 `slf4j-simple`, `logback-classic`, `slf4j-log4j12` 等)之间的桥梁。从 SLF4J 1.6 开始,`getSingleton()` 方法被移除或更改,因此如果项目中使用了较新版本的 `slf4j-api` 而依赖的绑定仍然是旧版本(例如 1.5.5 或更早),就会出现此错误 [^4]。 ### 解决方案 #### 1. 检查并统一 SLF4J 版本 确保项目中所有 SLF4J 相关的依赖版本一致。特别是以下两个部分: - **`slf4j-api`** - **绑定实现**(如 `slf4j-simple`, `logback-classic`, `slf4j-log4j12`) 建议使用最新稳定版本,例如: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.4.11</version> </dependency> ``` #### 2. 排除冲突依赖 如果项目中存在多个 SLF4J 实现绑定,可能会导致冲突。可以通过 Maven 的 `<exclusion>` 标签排除不需要的绑定: ```xml <dependency> <groupId>some.library</groupId> <artifactId>some-artifact</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. 使用正确的绑定 根据所选的日志实现,确保引入对应的绑定包,并避免同时使用多个绑定。例如: - 如果使用 Logback:`logback-classic` - 如果使用 Log4j:`slf4j-log4j12` - 如果使用 Simple Logging:`slf4j-simple` #### 4. 清理和重新构建项目 执行 Maven 或 Gradle 的 clean install 命令,以确保旧版本的依赖不会残留在构建环境中: ```bash mvn clean install # 或者 ./gradlew clean build ``` #### 5. 检查运行时类路径 确认运行时类路径中没有旧版本的 SLF4J JAR 文件。可以使用如下命令查看当前类路径中的 SLF4J 包: ```bash find /path/to/lib -name "*.jar" | xargs jar tf | grep "StaticLoggerBinder" ``` 也可以通过 Java 的 `-verbose:class` 参数来查看类加载信息: ```bash java -verbose:class -jar your-app.jar ``` ### 示例代码:验证 SLF4J 是否正常工作 ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LoggingTest { private static final Logger logger = LoggerFactory.getLogger(LoggingTest.class); public static void main(String[] args) { logger.info("SLF4J is working correctly."); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值