nonnull注解_别再自己用LoggerFactory生成logger实例了!试试slf4j注解

news/2024/7/7 9:59:35

背景

在项目开发中,记录日志是必做的一件事情。日志的实现有很多种:Logback,Log4j2,log4j,Java Util Logging等等。

而slf4j是一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的事情就是打印日志而不需要关心如何打印日志

slf4j是一个日志标准,并不是日志系统的具体实现。理解这句话非常重要,slf4j只做两件事情:

  • 提供日志接口
  • 提供获取具体日志对象的方法

使用slf4j的姿势是不是这样的?

public class LogExample {

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

}

每个类都要使用LoggerFactory生成一个Logger实例,复制代码时容易把**.class忘记修改,使我们对这样用法感到很无奈。幸好,lombok提供了一个注解帮我们减少了错误和减少代码量,提升了工作效率。

Slf4j注解使用示例

添加依赖

d10212f4c47f5d2611f7b08754966e74.png

使用注解

ee6ea59e2a3c7c78bbe5324413802bc9.png

验证

Slf4j定义

f0c061034ed897add51df160ef39e636.png

可以看到slf4j注解主要是产生一个log实例,可以作用于类和枚举。

使用反编译工具打开FreeMarkerController编译后的class文件:

438d0c015d660a6966267468f0790eeb.png

可以发现,slf4j注解注解在编译时主动将注解转换成

private static final Logger log = LoggerFactory.getLogger(FreeMarkerController.class);

总结及拓展

Lombok不是通过字节码改写来实现的。它主要是用编译器内支持的annotation processing,直接操纵抽象语法树(AST),根据需要添加新节点。

lombok提供了很多好用的注解,大家可以试用一下:

  • @Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
  • @Setter :注解在属性上;为属性提供 setting 方法
  • @Setter :注解在属性上;为属性提供 getting 方法
  • @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
  • @NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
  • @Cleanup : 可以关闭流
  • @Builder : 被注解的类加个构造者模式
  • @Synchronized : 加个同步锁
  • @SneakyThrows : 等同于try/catch 捕获异常
  • @NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
  • @Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。

http://www.niftyadmin.cn/n/4390368.html

相关文章

android日程界面博客_程序结构设计理论(Android)

程序结构设计理论(Android)邓能财20190714本文博客园地址:程序结构设计理论(Android) - 树曲 - 博客园明德厚学,爱国荣校东华理工大学理学院信息与计算科学2420987186qq.com一、android程序中,对界面的访问与更新1.android app的界面是树结构…

linux账号与身份管理系统,Linux基础篇 八 (Linux帐号与身份管理)

标签: UID/GID,passwd,shadow,群组管理groups/newgrp/groupadd/groupdel,帐号管理useradd/passwd/usermod/ userdel,列出或修改shell,用户信息设定与查阅chfn/finger/id,帐户切换su1. UID与GID当你要登入你的 Linux 主机的时候,那个 /etc/passwd 与 /etc/shadow 就必…

linux 管道交互,Linux C:具有独立读写命名管道的“交互式会话”?

我正在尝试使用“使用命名管道的进程间通信简介 - 使用命名管道的全双工通信”,link;特别是fd_server.c(包括如下供参考)Linux C:具有独立读写命名管道的“交互式会话”?这是我的信息,并编译行::~$ cat /etc/issueUbun…

linux掌握物理页面的分配和回收,系统软件课程设计指导书-2010-12

2、本次课程设计要求阅读的Linux源代码版本为2.4.18,其他版本无效;3、结合操作系统基本原理进行代码分析,并进行详细分析和完整注释,注释越详细,成绩越好;5、设计型题目要按照要求完成全部算法6、一定要充分地考虑个人…

找不到linux32位的,找不到crtn。o,連接64位系統上的32位代碼

Im attempting to assemble some 32-bit code using NASM and GCC on a 64-bit system. I use the following two commands我正在嘗試在64位系統上使用NASM和GCC來組裝一些32位的代碼。我使用以下兩個命令nasm -f elf32 -g -F stabs coc.asmgcc -m32 -o coc coc.oNASM appears …

python yield的解释

链接地址: http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html https://www.jianshu.com/p/d09778f4e055

springsecurity中session失效后怎样处理_结合Spring Security进行web应用会话安全管理

在本文中,将为大家说明如何结合Spring Security 和Spring Session管理web应用的会话。一、Spring Security创建使用session的方法Spring Security提供4种方式精确的控制会话的创建:always:如果当前请求没有session存在,Spring Sec…

linux cat最新,linux cat

Linux命令总结—cat命令(1)命令功能cat命令用于将多个文件连接,并将结果通过标准输出显示出来。(2)命令语法cat(选项) (参数)(3)选项说明-n或-number:由1开始对所有输出的行数编号;-b或—number-nonblank:和-n相似,只不…