JAVA && Spring && SpringBoot2.x — 学习目录
SLF4J——Simple Logging Facade For Java,他是一个针对各类java日志框架的统一Facade(门面)抽象。Java日志框架众多——常用的有java.util.logging、log4j、logback、commons-logging。而SLF4J定义了统一的日志抽象接口,而真正的日志实现实际上是在运行时决定的——它提供了各类日志框架的binding。
1. 项目中如何使用
1.1 引入maven依赖
1. SpringBoot引入依赖:
实际上spring-boot-starter-web依赖中已经引用了该日志的依赖,我们无需在引用下面的依赖了。
org.springframework.boot
spring-boot-starter-logging
2. JAVA项目引入依赖
ch.qos.logback
logback-classic
1.2.3
org.slf4j
slf4j-api
1.7.25
「辅助接口」也可以引入lombok依赖:
org.projectlombok
lombok
1.18.0
1.2 引入配置文件
logback
INFO
控制台-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n
GBK
${log.path}
logback.%d{yyyy-MM-dd}.log
30
1GB
文件记录-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
GBK
引入的配置文件应该叫什么名字呢?
1.2.1 配置文件存放的位置
放在src/main/resources下面即可。
1.2.2 加载文件的优先级
logback 在启动时,根据以下步骤寻找配置文件:
- 在 classpath 中寻找 logback-test.xml文件
- 如果找不到 logback-test.xml,则在 classpath 中寻找logback.groovy文件
- 如果找不到 logback.groovy,则在 classpath 中寻找logback.xml文件
- 如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现 Configuration 接口,使用它的实现来进行配置。【实际寻找的是logback-spring.xml文件】。
- 如果上述操作都不成功,logback 就会使用它自带的 BasicConfigurator 来配置,并将日志输出到console。
当然,在Spring环境中,也可以自定义配置logback-xxx.xml
的名字。需要在application.properties中使用logging.config=classpath:logging-自定义.xml
进行配置。
文章引用...
1.2.3 Spring推荐的命名方式
Logback:logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy
Log4j:log4j-spring.properties,log4j-spring.xml,log4j.properties,log4j.xml
Log4j2:log4j2-spring.xml,log4j2.xml
JDK(java Util Logging):logging.properties
注:Spring Boot官方推荐优先使用带有-spring的文件名作为日志配置(如使用logback-spring.xml而不是使用logback.xml)命名为logback-spring.xml的日志配置文件,Spring Boot可以为它添加一些Spring Boot特有的配置项【例如:spring boot的profile多环境配置】。
1.2.4 Spring如何实现多环境配置
- 日志配置文件名应定义为logback-spring.xml。
- 在日志配置文件中,使用
标签来包住这种环境下使用的配置。
若是多个环境,使用,号隔开
[%t] [%X{traceRootId}] (%file:%line\): %m%n
UTF-8
- 在application.properties配置文件中,选中激活哪一种或哪几种环境。
#激活开发资源文件
spring.profiles.action=dev
#叠加多个资源文件
spring.profiles.include=dev,test,pro
1.2.5 logback.xml如何读取application.properties的配置
标签允许我们从Spring中显示属性,以便在logback中使用。 - 若是需要一个后备值,以防该属性未配置,则可以使用defaultvalue属性。
在application.properties的配置
log.out.path="/app/test.log"
2. Spring的application.properties配置日志打印信息
2.1 日志的输出级别
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
2.2. 控制台输出
Spring Boot中默认将ERROR、WARN、INFO级别的日志输出到控制台。可以在application.properties中配置:
debug=true
那么核心Logger(包含嵌入式容器、hibernate、spring)会输出更多的内容,但是应用的日志并不会输出为DEBUG级别。
2.3. 文件输出
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台之外的日志文件,则需要在application.properties中设置logging.file或logging.path属性。
logging.file=my.log
logging.path=/var/log
- logging.file,设置文件,可以是绝对路径,也可以是相对路径,并写入日志内容。
- logging.path,设置目录,会在该目录下创建一个spring.log文件,并写入日志内容。
注:两者不能同时使用,如若同时使用,则只有logging.file生效。
(1)默认情况下,日志文件的大小到达10MB时会切分一下,产生新的日志文件。
(2)默认级别为:ERROR、WARN、INFO。
2.4 日志级别控制
可以在application.properties中配置日志级别。
logging:
level:
com.tellme.mapper: DEBUG
- logging.level:日志级别前缀,*为包名或Logger名。
- LEVEL:选项为TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。
注:即使在logback-spring.xml设置的打印级别是info,但是在配置文件中配置的打印级别是debug,则按照配置文件执行。
3. logback-spring.xml参数解析
logback
INFO
控制台-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n
GBK
${log.path}
logback.%d{yyyy-MM-dd}.log
30
1GB
文件记录-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
GBK
3.1 根节点
包含的属性
- scan:当此属性设置为true时,配置文件如果发生改变,将会重新加载,默认值是true。
- scanPeriod:[皮锐德]设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒,当scan为true时,此属性生效,默认时间是1分钟。
- debug:当属性设置为true时,将打印logback内部日志信息,事实查看logback运行状态,默认值为false。
根节点
属性一:设置上下文名称
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用
logback
3.1 定义变量
3.1.1 定义logback.xml的变量
property标签——可以定义变量
用来定义变量的标签,
${contextName}
3.1.2 读取Spring配置文件的变量
springProperty标签—读取Spring的变量
在application.properties的配置
log.out.path="/app/test.log"
若是需要一个后备值,以防该属性未配置,则可以使用defaultvalue属性。
3.2 定义输出的类型
appender用来格式化日志输出节点,有两个属性name和class,class用来指定哪种输出策略,常用的就是控制台输出和文件输出策略。
3.2.1 控制台输出ConsoleAppender
concole[肯扫]
%d %p [%t] (%file:%line\): %m%n
UTF-8
- %d ——日志输出时间
- %p ——日志级别
- %t ——输出日志的进程的名字
- %file ——输出日志的文件名
- %line ——输出日志的行数
- %m ——日志消息
- %n ——平台的换行符
3.2.2 文件输出RollingFileAppender
另一种常见的日志输出到文件,随着应用时间越来越长,日志也会增长的越来越多,将他们输出到同一文件并非一个好方法。RollingFileAppender用于切分文件日志。
log/catalina.out
${logPath}/log/catalina.out.%d{yyyy_MM_dd_HH}
30
%d %p [%t] (%file:%line\): %m%n
UTF-8
其中重要的是rollingPolicy的定义:
同理:%d{yyyy_MM_dd_HH}来定义精确到小时的日志切分方式。
用来指定日志文件的上限大小,例如设置1GB的话,那么到了这个值,就会删除旧的日志。
配置,文件滚动时,会进行压缩。
https://blog.csdn.net/iamlihongwei/article/details/62430994
1. 如何设置日志级别,只输出Error日志
ERROR
2. 如何避免输出ERROR日志
ERROR
DENY
ACCEPT
需要注意的是,只是避免输出ERROR级别的日志,若是只想输出INFO级别的,存在一些问题:因为不能排除WARN级别的日志。
3. 如何只输出INFO级别的日志
INFO
ACCEPT
DENY
3.3 定义appender的日志级别
root节点是必选节点——用来指定最基础的日志输出级别,只有一个level属性。
- level:用来设置打印级别,大小写无关,默认DEBUG。
- appender-ref:标识这个appender将会添加到这个logger。
- ref:是
的name属性。
logger节点是可选节点——设置一个包或者具体的某一个类的日志打印级别
- name:用来指定受此logger约束的某一个包或者具体的一个类。
- level:用于设置打印级别。如果未设置此属性,那么当前logger将会继承上级级别。
- addtivity:是否向上级logger传递打印信息,默认是true。
1. 带有logger配置,不指定level,不指定appender-ref
因为没有设置addivity,默认为true,将该logger的打印信息向上传递(
)没有设置appender-ref,此
2.带有logger配置,指定级别level,指定appender-ref
打印级别是WRAN。additivity属性是false,表示此
- 若是additivity="true"的话,则会打印两次,因为打印信息会向上级传递,logger本身打印一次,root接着会打印一次,此时file中也会有日志。
4. 分析日志输出的信息
默认情况下,SpringBoot会使用Logback来记录日志,并且INFO级别输出到控制台。
- 时间日期:精确到毫秒。
- 日志级别:ERROR> WARN>INFO>DEBUG > TRACE 优先级如前面,默认情况下是INFO,则INFO以及优先级更高的WARN和ERROR会被显示。
- 进程ID:就是PID。
- 分割符:---标识实际日志的开始。
- 线程名:方括号括起来(可能会截断控制台的输出)。
- Logger名:通常使用源代码的类名。
- 日志内容。
文件参考
【spring boot】8.spring boot的日志框架logback使用