「初识」Spring Boot日志配置及输出
Spring Boot 默认使用 SLF4J+Logback 记录日志,并提供了默认配置,即使我们不进行任何额外配置,也可以使用 SLF4J+Logback 进行日志输出。
常见的日志配置包括日志级别、日志的输入出格式等内容。
日志级别
日志的输出都是分级别的,当一条日志信息的级别大于或等于配置文件的级别时,就对这条日志进行记录。
常见的日志级别如下(优先级依次升高):
- trace:追踪,指明程序运行轨迹。
- debug:调试,实际应用中一般将其作为最低级别,而 trace 则很少使用。
- info:输出重要的信息,使用较多。
- warn:警告,使用较多。
- error:错误信息,使用较多。
输出格式
我们可以通过以下常用日志参数对日志的输出格式进行修改,如下表:
| 输出格式 | 说明 |
| %d{yyyy-MM-dd HH:mm:ss, SSS} | 日志生产时间,输出到毫秒的时间 |
| %-5level | 输出日志级别,-5 表示左对齐并且固定输出 5 个字符,如果不足在右边补0 |
| %logger 或 %c | logger 的名称 |
| %thread 或 %t | 输出当前线程名称 |
| %p | 日志输出格式 |
| %message 或 %msg 或 %m | 日志内容,即 logger.info("message") |
| %n | 换行符 |
| %class 或 %C | 输出 Java 类名 |
| %file 或 %F | 输出文件名 |
| %L | 输出错误行号 |
| %method 或 %M | 输出方法名 |
| %l | 输出语句所在的行数, 包括类名、方法名、文件名、行数 |
| hostName | 本地机器名 |
| hostAddress | 本地ip地址 |
Spring Boot 日志默认级别为 info,日志输出内容默认包含以下元素:
- 时间日期
- 日志级别
- 进程 ID
- 分隔符:---
- 线程名:方括号括起来(可能会截断控制台输出)
- Logger 名称
- 日志内容
修改默认日志配置
我们可以根据自身的需求,通过全局配置文件(application.properties/yml)修改 Spring Boot 日志级别和显示格式等默认配置。
在 application.properties 中,修改 Spring Boot 日志的默认配置,代码如下:
#日志级别
logging.level.net.biancheng.www=trace
#使用相对路径的方式设置日志输出的位置(项目根目录目录\my-log\mylog\spring.log)
#logging.file.path=my-log/myLog
#绝对路径方式将日志文件输出到 【项目所在磁盘根目录\springboot\logging\my\spring.log】
logging.file.path=/spring-boot/logging
#控制台日志输出格式
logging.pattern.console=%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} - %msg%n
#日志文件输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n
自定义日志配置
在 Spring Boot 的配置文件 application.porperties/yml 中,可以对日志的一些默认配置进行修改,但这种方式只能修改个别的日志配置,想要修改更多的配置或者使用更高级的功能,则需要通过日志实现框架自己的配置文件进行配置。
Spring 官方提供了各个日志实现框架所需的配置文件,用户只要将指定的配置文件放置到项目的类路径下即可。
| 日志框架 | 配置文件 |
|---|---|
| Logback | logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy |
| Log4j2 | log4j2-spring.xml、log4j2.xml |
从上表可以看出,日志框架的配置文件基本上被分为 2 类:
- 普通日志配置文件,即不带 spring 标识的配置文件,例如 logback.xml;
- 带有 spring 表示的日志配置文件,例如 logback-spring.xml。
普通日志配置文件
我们将 logback.xml、log4j2.xml 等不带 spring 标识的普通日志配置文件,放在项目的类路径下后,这些配置文件会跳过 Spring Boot,直接被日志框架加载。通过这些配置文件,我们就可以达到自定义日志配置的目的。
将 logback.xml 加入到 Spring Boot 项目的类路径下(resources 目录下),该配置文件配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
%d{yyyy-MM-dd HH:mm:ss} [%thread]**************** %-5level %logger{50} - %msg%n
${LOG_HOME}/${appName}.log
${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log
365
100MB
%d{yyyy-MM-dd HH:mm:ss} [ %thread ] ------------------ [ %-5level ] [ %logger{50} : %line ] -
%msg%n
带有 spring 标识的日志配置文件
Spring Boot 推荐用户使用 logback-spring.xml、log4j2-spring.xml 等这种带有 spring 标识的配置文件。这种配置文件被放在项目类路径后,不会直接被日志框架加载,而是由 Spring Boot 对它们进行解析,这样就可以使用 Spring Boot 的高级功能 Profile,实现在不同的环境中使用不同的日志配置。
将 logback.xml 文件名修改为 logback-spring.xml,并将配置文件中日志输出格式的配置修改为使用 Profile 功能的配置。
配置内容修改前,日志输出格式配置如下:
......
%d{yyyy-MM-dd HH:mm:ss} [%thread]**************** %-5level %logger{50} - %msg%n
......
修改 logback-spring.xml 的配置内容,通过 Profile 功能实现在不同的环境中使用不同的日志输出格式,配置如下:
......
%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n
%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n
......
在 Spring Boot 项目的 application.yml 中,激活开发环境(dev)的 Profile,配置内容如下:
#默认配置
server:
port: 8080
#切换配置
spring:
profiles:
active: dev
---
#开发环境
server:
port: 8081
spring:
config:
activate:
on-profile: dev
---
#测试环境
server:
port: 8082
spring:
config:
activate:
on-profile: test
---
#生产环境
server:
port: 8083
spring:
config:
activate:
on-profile: prod