SpringBoot+Kotlin项目使用Lombok@Slf4j报Unresolved reference: log错误
错误原因
- Lombok 注解是为 Java 设计的编译时增强工具,默认无法识别 Kotlin 代码,仅添加 Lombok 依赖的前提下,
@Slf4j注解不会在 Kotlin 类中自动注入静态log变量,因此调用log.info()时会找不到引用。 - 该错误和你配置的
logback-spring.xml无关,属于日志对象未生成的编译问题。
解决方案
推荐优先使用 Kotlin 原生方案实现日志注入,无需依赖 Lombok:
方案一:Kotlin 原生实现(推荐)
- 删掉
OrderController.kt中Lombok相关的引入和注解:- 移除
import lombok.extern.slf4j.Slf4j - 移除类上方的
@Slf4j注解
- 移除
- 在
OrderController类内部添加日志对象声明,有两种可选写法:- 原生SLF4J写法,无需额外依赖:
companion object { private val log = org.slf4j.LoggerFactory.getLogger(this::class.java) } - 简化写法,需先在
build.gradle.kts中添加kotlin-logging依赖:
之后在类中声明:implementation("io.github.microutils:kotlin-logging-jvm:3.0.5")companion object { private val log = logger() }
- 原生SLF4J写法,无需额外依赖:
- 原有
log.info()调用代码无需修改,可直接正常运行。
方案二:适配Lombok支持Kotlin(不推荐,兼容性差)
如果一定要保留Lombok的使用习惯,可修改Gradle配置适配:
- 在
build.gradle.kts的plugins块中添加kapt插件:id("kotlin-kapt") - 修改Lombok依赖配置,增加注解处理器声明:
compileOnly("org.projectlombok:lombok") kapt("org.projectlombok:lombok") - 新增kapt配置开启Lombok的Kotlin支持:
kapt { arguments { arg("lombok.kotlin.support", "true") } } - 重新编译项目即可。
内容的提问来源于stack exchange,提问作者Mama
相关产品推荐
相关产品推荐

