@Slf4j日志注解的引入问题

问题背景:

新建的项目中引入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等。


image.png

总结具体解决办法:

  • 项目中如果需要使用@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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容