springboot执行遇到错误java.lang.NoSuchMethodError: ‘java.lang.Object ch.qos.logback.classic.LoggerContex

这两天在使用 LangChain4j 进行开发的 Spring Boot 项目,遇到了一下异常,记录一下问题:

java.lang.NoSuchMethodError: 'java.lang.Object

ch.qos.logback.classic.LoggerContext.getConfigurationLock()'

剖析:

异常栈显示,日志初始化失败,具体报错为

java.lang.NoSuchMethodError:'java.lang.Object ch.qos.logback.classic.LoggerContext.getConfigurationLock()'

异常源于

org.springframework.boot.logging.logback.LogbackConfigurator.getConfigurationLock(LogbackConfigurator.java:53)。从整个异常栈来看,是 Spring Boot 在尝试初始化 Logback 日志系统时出现了问题。

原因:

导致该异常的原因是项目中日志配置文件缺失。对于使用 Logback 日志框架的项目,通常需要logback.xml文件进行配置;若使用 Log4j2,则需要log4j2.xml;还有logging.properties也可用于日志配置。在本项目中,正是缺少了相应的日志配置文件,从而引发了日志系统初始化失败的问题。

解决:

解决方法就是,补充相应的配置文件,例如,项目使用 Logback,就在src/main/resources目录下创建logback.xml文件,并根据项目需求配置好日志级别、输出格式、输出路径等相关参数。配置完成后,运行项目,日志系统便能正常初始化,java.lang.NoSuchMethodError异常也随之消失。

Listening for transport dt_socket at address: 6100 Exception in thread "main" java.lang.NoSuchMethodError: 'void ch.qos.logback.classic.LoggerContext.setMDCAdapter(org.slf4j.spi.MDCAdapter)' at ch.qos.logback.classic.spi.LogbackServiceProvider.initialize(LogbackServiceProvider.java:43) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:201) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:187) at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:511) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:497) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:446) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:472) at cn.com.truthvision.iacp.biz.file.storage.FileStorageServiceApplication.<clinit>(FileStorageServiceApplication.java:22) failed to start IACP UPLOAD FILE SERVICE! [root@qushi ~]# kubectl logs biz-file-storage-service-7c57d749f8-6876k -n iacp -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:6100 IACP UPLOAD FILE SERVICE starting... -XX:ConcGCThreads=1 -XX:+CrashOnOutOfMemoryError -XX:+ExplicitGCInvokesConcurrent -XX:G1ConcRefinementThreads=4 -XX:GCDrainStackTargetSize=64 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=536870912 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=536870912 -XX:MinHeapSize=536870912 -XX:-OmitStackTraceInFastThrow -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC [0.111s][info][gc] Using G1 Listening for transport dt_socket at address: 6100 [0.622s][info][gc] GC(0) Pause Young (Normal) (G1 Evacuation Pause) 30M->18M(512M) 6.300ms
08-07
`java.lang.NoSuchMethodError: 'void ch.qos.logback.classic.LoggerContext.setMDCAdapter(org.slf4j.spi.MDCAdapter)'` 错误通常是由于类路径中存在不兼容的库版本,导致运行时找不到特定方法。可以参考以下解决方法: ### 1. 检查并更新依赖版本 确保项目中使用的 `logback` 相关依赖版本兼容。可以使用以下依赖配置: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>org.logback-extensions</groupId> <artifactId>logback-ext-spring</artifactId> <version>0.1.4</version> </dependency> ``` 这样可以保证 `logback` 相关库版本一致,避免因版本不兼容导致的方法找不到问题 [^2]。 ### 2. 排除冲突的依赖 若引用了第三方库,可能会引入冲突的 `logback` 版本。可以在 `pom.xml` 中排除冲突的依赖。例如,若发现 `logback-core` 有不同版本冲突,可在依赖中排除冲突版本: ```xml <dependency> <groupId>第三方库的groupId</groupId> <artifactId>第三方库的artifactId</artifactId> <version>第三方库的版本</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> </exclusions> </dependency> ``` 排除冲突依赖后,停掉服务器(如 Tomcat),进行 Maven 更新,执行 `clean - install` 操作,再重启服务器 [^3]。 ### 3. 检查 Spring Boot 和 Feign 版本兼容性 若项目使用了 Spring Boot 和 Feign,要确保它们的版本兼容。版本不兼容也可能导致 `NoSuchMethodError` 错误。例如,若 Spring Boot 版本为 `2.3.0.RELEASE`,需检查引入的 Feign 版本是否与之匹配 [^4]。 ### 4. 清理缓存和重新构建项目 有时候,IDE 或构建工具的缓存可能会导致问题。可以尝试清理 IDE 的缓存,如 IntelliJ IDEA 的 `File -> Invalidate Caches / Restart`,或者手动删除项目的 `target` 目录,然后重新构建项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值