这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
(一) 什么是日志框架
- 在系统开发过程中会将一些关键信息输出,用于测试或者异常问题的回溯.
- 随着输出的信息越来越多,信息的表现形式也各式各样,因此抽离并整合出了日志框架,表现形式上就是jar包
- 市面上常见的日志框架:
Java Util Logging
,Apache Commons Logging
,slf4j
,log4j
,log4j2
,logback
- 日志框架各种各样,但是总体就分为两类:
日志门面
和日志实现
,就像传话的领导
和干活的码农
(1)日志门面和日志实现对比
日志门面
是一种规范,只定义了输入的规范,不提供具体的输出功能,不可以单独使用日志实现
则是真正的实现了输出功能,它们也有自己的输入规范.理论上可以单独使用而不需要日志门面
- 实际上我们总会把
日志门面
和日志实现
组合起来使用.这是因为每个日志实现
都有自己的输入规范,一旦需求变动或者功能迁移,那样管理日志输出配置或者日志转换就会冗杂其他.
就像:原来,我有了问题我直接找领导,领导再去安排具体干活的人; 现在,我直接找对应的人, 但是项目变动了,我需要同时找多个人,但是这几个人思维逻辑和处理方式都不一样,在这种情况下就必要花费更多的经历来沟通,实际上我们承担了领导的这个职责. Apache Commons Logging
,slf4j
就是日志门面
,Java Util Logging
,log4j
,log4j2
,logback
就是日志实现.
(二)日志框架的使用
对于SpringBoot来说,默认使用的日志门面
是Apache Commons Logging
,默认使用的日志实现
是logbac
, 但是我们常用的组合方式则是slfj4
+logback
或 slfj4
+log4j2
(1) slfj4的使用
- 导入
slf4j-api.jar
包 - 在代码中使用日志
1). 官方推荐方式
1 | ini复制代码//在class类中使用, XXX代表的是当前类的类名. |
2). 不推荐的方式
1 | ini复制代码Logger logger = LoggerFactory.getLogger(this.getClass()); |
- 如果使用了lombok,推荐的方式则是直接在类上注解
@Slf4j
(2) logback的使用
- SpringBoot中支持的logback配置有两种:
logback.xml
和logback-spring.xml
logback.xml
和logback-spring.xml
都可以用来配置logback,但是2者的加载顺序是不一样的.
logback.xml
—>application.yml
—>logback-spring.xml
logback.xml
加载早于application.yml
,所以如果你需要使用application.yml
中的变量,则需要使用logback-spring.xml
这种方式.
- logback-spring.xml配置
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
在此处使用了变量${LOG_PATH:-.}
,该变量从application.yml
中定义
1 | yaml复制代码logging: |
因此如果日志有分环境需求,则可以使用logback-spring.xml
的方式,然后变量在application-XXX.yml
中定义.
1 | arduino复制代码 作者:ZOUZDC |
本文转载自: 掘金