问题背景:
新建的项目中引入lombok依赖;pom文件依赖如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>compile</scope>
</dependency>
此时在代码中去使用@Slf4j发现一直提示报错;无法识别log;访问不到log.info()等方法;
这里就需要解释一下slf4j,
slf4j,simple logging facade for java的缩写,翻译为java的简单日志外观。slf4j是一个开源项目,它提供我们一个一致的API来使用不同的日志框架。根据我个人的理解,可以认为是一个java日志实现的一个标准规范接口;我们只需要调用slf4j规定的相关日志接口,内部将会去调用具体的日志实现模块完成日志记录;如log4j、logback等。所以我们项目如果要调用slf4j的接口方法;首先需要引入slf4j。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
引入上方的依赖之后发现可以在代码中访问log.info()等日志方法;但是执行项目会发现项目还是无法打印日志并提示错误:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
根据前文关于sl4j的解释,我们就可以明白原因是因为slf4只是一套接口规范,并没有接口的具体实现。所以无法完成日志打印,此时我们只需要引入具体的日志记录模块即可;如log4j、logback等。
总结具体解决办法:
- 项目中如果需要使用@Slf4j注解,需要引入lombok,logback(以logback为例,也可以引入其他的日志实现模块)、slf4j-api;完整的依赖如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
后续在讲idea编译版本提升到jdk8时,执行代码出现了一个异常
Java: THE JPS incremental annotation process is disabled. Partial recompilation results may be inaccurate. "The JPS. Track. Ap. Use the build process dependencies" VM logo enable/disable delta annotation processing environment.
此异常是由于idea.2021.3与lombok版本不匹配导致的,讲lombok版本升到1.8就正常了。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>