这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战
前言
日志门面(日志抽象层) | 日志实现 |
---|---|
JCL(jakarta commons logging)、SLF4J (simple logging facade for java) 、jboss-logging | log4j、JUL(java.util.logging)、log4j2、logback |
使用日志框架,我们需要引入一个日志抽象层
和一个日志实现
。一般我们使用slf4j
和logback
。
日志统一
1.1 遗留问题
每一个框架都会使用日志来记录框架的运行情况,如果将多个框架集成到一个系统中,那么框架使用不同的日志,如何在系统中进行统一输出呢?
例如:spring框架默认采用JCL,springboot框架默认采用SLF4J和logback。如何让系统中所有日志统一到slf4j呢?
- 将系统中其它日志框架排除出去
- 用中间包替换原有的日志框架
- 导入slf4j其它日志实现
springboot能够自动适配所有日志
,就是通过上述步骤实现的。
1.2 日志使用
public class XXServiceImpl implements XXService {
Logger log = LoggerFactory.getLogger(XXServiceImpl.class);
log.info("serviceImpl .... ");
}
日志配置
一般我们需要将日志输出到控制台
或者文件
中,所以我们需要自定义配置文件。springboot对日志框架支持,只需在resources
文件夹直接建立相应的文件。
logging system | customization |
---|---|
logback | logback-spring.xml、logback.xml |
log4j | log4j2-spring.xml、log4j2.xml |
jul | logging.properties |
<!--
父节点configuration三个属性
sacn: 自动加载判断,当配置文件发生改变时,将会被重新加载。默认true
scanPeriod: 检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认ms。
debug: 当被设置为true时,将打印出logback内部日志信息,实时查看logback日志框架的运行状态
-->
<configuration>
<!--
logger用来设置某一个包或者某一个具体类的日志打印级别及方式。在logger内可以
包含0个或者多个appender-ref,然后对于的appender将会添加到这个logger。
三个属性如下:
name:指定对应的包路径或者类路径
level:设置日志打印等级
additivity:是否向上级log传递打印信息,默认true
-->
<logger></logger>
<!--
root和logger元素,是根logger,所有logger的最上级。一个属性:
level:指定日志级别
-->
<root></root>
<!--
父节点configuration的子节点appender,定义日志输出方式。两个属性:
name:指定当前appender的名称
class:指定appender对于的类,控制日志输出方式
-->
<appender></appender>
<!--
encoder:将日志信息转换成字节数组并将字节数组写到输出流中。
%logger{length}:输出logger名,length表示从尾部取多少字符。0代表最后一个`.`后的字符串。
比如:%logger:mainPackage.sub.sample.Bar ===> mainPackage.sub.sample.Bar
%logger{0}: mainPackage.sub.sample.Bar ===> Bar
%logger{5}: mainPackage.sub.sample.Bar ===> e.Bar
%date{pattern}:输出时间。
比如:%date{yyyy-MM-dd HH:mm:ss} ==> 2021-08-08 23:28:01
%msg:输出应用程序信息
-->
<encoder></encoder>
</configuration>