背景在项目开发中,记录日志是必做的一件事情 。日志的实现有很多种:Logback,Log4j2,log4j,JAVA Util Logging等等 。
而slf4j是一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的事情就是打印日志而不需要关心如何打印日志
slf4j是一个日志标准,并不是日志系统的具体实现 。理解这句话非常重要,slf4j只做两件事情:
- 提供日志接口
- 提供获取具体日志对象的方法
public class LogExample {【别再自己用LoggerFactory生成logger实例了!试试slf4j注解】每个类都要使用LoggerFactory生成一个Logger实例,复制代码时容易把**.class忘记修改,使我们对这样用法感到很无奈 。幸好,lombok提供了一个注解帮我们减少了错误和减少代码量,提升了工作效率 。
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
}
Slf4j注解使用示例添加依赖
文章插图
使用注解
文章插图
验证
Slf4j定义
文章插图
可以看到slf4j注解主要是产生一个log实例,可以作用于类和枚举 。
使用反编译工具打开FreeMarkerController编译后的class文件:
文章插图
可以发现,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方法 。
推荐阅读
- 电脑上的纽扣电池到底有什么用?需要更换吗?
- 黄茶的养生功效与作用,洋葱的养生功效与作用
- 使用Swoole协程实现 WebRTC 信令服务器
- 兰贵人茶叶有什么作用,茶叶水洗脸有什么好处
- 利用docker部署solo并升级为https
- 荷包蛋怎么煮才能完整?
- 剪辑大神都在用的加字幕神器,你知道嘛
- 秦国灭赵国之战 秦灭赵国用了几年
- 10条很棒的Python一行代码
- 8 种用于前端性能分析工具