使用logstash-logback-encoder对接ELK时遇NoSuchMethodError求助
问题解决方案:logstash-logback-encoder NoSuchMethodError 处理
问题根源
java.lang.NoSuchMethodError: 'java.time.Instant ch.qos.logback.classic.spi.ILoggingEvent.getInstant()' 错误是因为logstash-logback-encoder 7.4版本依赖的logback最低版本为1.2.10,而你的项目中实际引入的logback版本过低(低于1.2.0,该版本才新增getInstant()方法),导致运行时找不到对应方法。
解决方案
方案1:升级logback版本至兼容版本
- 先检查项目中当前logback版本:
- Maven执行命令:
mvn dependency:tree | grep logback - Gradle执行命令:
gradle dependencies | grep logback
- Maven执行命令:
- 在项目依赖管理中统一指定兼容的logback版本(推荐1.2.12,稳定性较好):
- Maven(pom.xml):
<!-- 若使用Spring Boot Parent,直接在properties中覆盖版本 --> <properties> <logback.version>1.2.12</logback.version> </properties> <!-- 未使用Spring Boot Parent则在dependencyManagement中声明 --> <dependencyManagement> <dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.12</version> </dependency> </dependencies> </dependencyManagement> - Gradle(build.gradle):
// 若使用Spring Boot插件,直接覆盖版本属性 properties { set("logback.version", "1.2.12") } // 或直接声明依赖 dependencies { implementation "ch.qos.logback:logback-classic:1.2.12" implementation "ch.qos.logback:logback-core:1.2.12" }
- Maven(pom.xml):
方案2:降级logstash-logback-encoder版本
若无法升级logback,可将logstash-logback-encoder降级至兼容低版本logback的6.x系列(如6.6版本兼容logback 1.1.x):
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency>
验证
修改依赖后,重新构建项目并启动服务,确认错误不再出现即可。
内容的提问来源于stack exchange,提问作者Mafei
相关产品推荐
相关产品推荐

