@Slf4j报错:Not generating field log: A field with same name already exists

本文介绍了在项目中同时使用Slf4j和LittlecLogger时遇到的冲突问题,提供了将log名称统一为LOG的修复方法,并简要介绍了Slf4j的作用、导入方式和Lombok在简化日志配置中的作用。

错误出处:

错误原因:

 同时使用了Slf4j注解以及LittlecLogger

private static final LittlecLogger log = LittlecLoggerFactory.getLogger(TimeTrackController.class);

修复方法:

将log改为LOG,便于区分,代码即用到了@Slf4j的log方法,也用到了LittlecLogger的 LOG

进一步了解一下Slf4j:

(1)Slf4j就是为了能够少写两行代码,不用每次都在类的最前边写上:

private static final Logger logger = LoggerFactory.getLogger(this.XXX.class);

(2)如何导入@Slf4j?
确保idea中有Lombok插件(IntelliJ IDEA 2020.3及以上版本已经内置Lombok plugin了,所以不需要安装插件,只需要在项目添加Lombok依赖就能用了)

(3)为什么需要lombok:该插件中有@Slf4j注解,会将@Sel4j注解编译成:

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(this.XXX.class);

在使用 Lombok 的 `@Slf4j` 注解时,如果出现提示找不到 `log` 变量的问题,通常与项目配置、依赖管理或 IDE 设置相关。以下是常见原因及解决方案: ### 1. Lombok 依赖未正确引入 确保项目中已正确引入 Lombok 依赖。对于 Maven 项目,`pom.xml` 中应包含以下内容: ```xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> ``` 对于 Gradle 项目,`build.gradle` 中应包含: ```groovy compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' ``` 未正确引入依赖会导致编译器无法识别 `@Slf4j` 注解,从而无法生成 `log` 变量[^2]。 ### 2. IDE 未启用注解处理器 在 IntelliJ IDEA 中,需要确保启用了注解处理器。进入 **Settings (Preferences)** -> **Build, Execution, Deployment** -> **Compiler** -> **Annotation Processors**,勾选 **Enable annotation processing**。此外,确认 **Obtain processors from project classpath** 已选中,以确保使用项目依赖中的 Lombok 版本而非本地版本[^1]。 ### 3. Lombok 插件未安装或未启用 IntelliJ IDEA 需要安装 Lombok 插件以支持注解处理。进入 **Settings (Preferences)** -> **Plugins**,搜索 "Lombok" 并安装插件。安装完成后重启 IDE 并确保插件已启用。 ### 4. 清理并重新构建项目 有时旧的编译文件可能导致问题。尝试清理项目并重新构建: - 对于 Maven 项目,使用以下命令: ```bash mvn clean install ``` - 对于 Gradle 项目,使用以下命令: ```bash gradle clean build ``` ### 5. 检查 Lombok 版本一致性 确保所有模块使用的 Lombok 版本一致。不同模块使用不同版本可能导致冲突。检查项目的依赖树,确保没有多个 Lombok 版本被引入。 ### 6. 验证代码使用方式 确认 `@Slf4j` 注解已正确使用。注解应放置在类级别上,且类中无需手动声明 `log` 变量。例如: ```java import lombok.extern.slf4j.Slf4j; @Slf4j public class ExampleClass { public void exampleMethod() { log.info("This is an info log."); } } ``` 如果 `log` 变量仍然无法识别,可能是 IDE 缓存问题,尝试重启 IDE 或重新导入项目。 ### 7. 使用 Lombok 的替代方案 如果上述方法均无效,可考虑使用 SLF4J 的原生方式声明日志变量: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExampleClass { private static final Logger log = LoggerFactory.getLogger(ExampleClass.class); public void exampleMethod() { log.info("This is an info log."); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值