SpringBoot日志解析(十四)

  • Post author:
  • Post category:其他


1. 日志简介

从日志框架角度来看日志分为日志实现框架和日志门面框架。实现框架主要有log4j、log4j2、JUL和Logback;日志门面框架主要JCL和slf4j。SpringBoot默认使用的式slfj+logback。

2. 日志抽象框架是如何找到日志实现框架的?

首先在门面框架中定义一个接口LoggerFactoryBinder,所有的实现框架必须实现这个接口,而且实现类必须具有相同的类名和包路径org/slf4j/impl/StaticLoggerBinder。这样日志门面框架就可以根据该路径去寻找日志实现框架。

3. Springboot日志分析

SpringBoot会引入一个spring-boot-starter-logging依赖,该依赖会引入logback-classic、log4j-to-slf4j和jul-to-slf4j,他们之间的依赖关系如下图所示:

4. 日志配置

  • 4.1 <configuration scan=”true” scanPeriod=”60 seconds” debug=”false” >

– Scan: 当设置为true时,配置文件若发生改变,将会重新加载

– ScanPeriod:扫描时间间隔,若没给出时间单位默认为毫秒

– Debug:若设置为true,将打印出logback内部日志信息

4.2 Configuration子节点:

– <contextName>demo</contextName>,主要用来区分不同应用程序的记录,默认为default。

– <property name=”LOG_PATH” value=”logs”>,name变量名,value变量值。我们也可以使用这种方式去加载配置文件中的key-value值,<property resource=”application.properties”>;此外还可以使用占位符,如<property name=”LOG_PATH” value=”${logging-path:-${user.home}/${spring.application.name}/logs}”>

4.3 appender的子节点比较多,这里主要说下pattern:

– Logger{length}:输出日志的logger名,可有一个整形参数,功能时缩短logger名。

ContextName|cn:上下文名称

– date{pattern}:输出日志的打印时间,模式语法与java.text.SimpleDateFormat兼容

– p|le|level:日志级别

– M|method:输出日志的方法名

– r|relative:从程序启动到创建日志记录的时间

– m|msg|message:程序提供的信息

– n:换行符

4.4 root&logger,这两个类似,root用于设置全局,logger用于应用级别的配置,它里面有个属性additivity,如果为false,就会在root中再打印一次了。

5.业务日志的分类

我们可以使用SiftingAppender将日志根据不同的key将日志进行分类,分类的key需要使用MDC进行设置,具体流程如下图所示:



版权声明:本文为mo_long00原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。