前言
代码运行日志对于我的项目来说非常重要。本文记录的是 SpringBoot 与 Log4j2 的整合配置过程,至于其余日志框架和 Log4j2 的比照,小伙伴们可自行查阅材料。
环境
- JDK 8
- Gradle 6.7
筹备
排除 Logback 依赖
先排除 SpringBoot 默认应用的 Logback 日志框架,在 build.gradle
里增加上面的配置。
configurations { implementation.exclude module: 'spring-boot-starter-logging'}
引入 Log4j2 依赖
咱们采纳 Log4j2 反对的 YAML 格局配置文件,反对该格局须要退出 jackson-dataformat-yaml
依赖,详情可查阅文档。
dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j2' implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml'}
理解
日志等级
Standard Level | Int Level |
---|---|
OFF | 0 |
FATAL | 100 |
ERROR | 200 |
WARN | 300 |
INFO | 400 |
DEBUG | 500 |
TRACE | 600 |
ALL | Integer.MAX_VALUE |
级别从低到高别离是:ALL
、TRACE
、DEBUG
、INFO
、WARN
、ERROR
、FATAL
、OFF
但因为咱们应用的是 Slf4j
门面,所以 ALL
、FATAL
和 OFF
级别无奈应用。可阅读文章 为什么阿里巴巴禁止工程师间接应用日志零碎(Log4j、Logback)中的 API 理解日志门面相干常识。
配置文件构造
Appenders
Appender
- Layout
- Filter
- Policy
- Strategy
- ...
Loggers
- Logger
- RootLogger
Appender
能够了解为「管道」,管制日志保留的地位。上面的其它配置参数都是以 rollingFileAppender
为例。
其余 Appender 相干文档可参考:Log4j2 官网文档 Appender 局部。
Layout
参数 | 阐明 |
---|---|
%d | 日志工夫 |
%level | 日志级别 |
%pid | 过程 ID |
%t | 线程名 |
%c | Logger 名称 |
%msg | 日志文本 |
%n | 换行符 |
%highlight | 色彩高亮 |
管制日志格局,个别采纳 patternLayout
。
appenders: rollingFile: patternLayout: # 日志格局模板 pattern: "%d{DEFAULT} %5level %pid --- %c : %msg%n"
如果想在「控制台」中打印出有色彩的日志信息,可退出 consoleAppender
后在 pattern
字段中退出 %highlight
参数。
其余 Layout 相干文档可参考:Log4j2 官网文档 Layout 局部。
Filter
管制日志是否进入管道,示例中采纳 thresholdFilter
。
appenders: rollingFile: filters: thresholdFilter: # 匹配的级别 >= info level: info onMatch: accept onMismatch: neutral
Filter 也能够在 Loggers 层级里配置,具体内容请自行参考文档。
其余 Filter 相干文档可参考:Log4j2 官网文档 Filter 局部。
Policy
管制日志何时(when)进行归档。示例中采纳 sizeBasedTriggeringPolicy
和 timeBasedTriggeringPolicy
。
appenders: rollingFile: # 日志归档文件名模板 filePattern: log/backup/$${date:yyyy-MM}/%d{yyyy-MM-dd}_${projectName}_%i.log policies: # 日志文件达到 20 MB 时触发 sizeBasedTriggeringPolicy: size: 20 MB # 以天为单位归档日志 timeBasedTriggeringPolicy: interval: 1
留神 filePattern
中最小的工夫单位是「天」,所以 timeBasedTriggeringPolicy.interval = 1
时,日志将以「天」为单位进行归档。
其余 Policy 相干文档可参考:Log4j2 官网文档 Policy 局部。
Strategy
管制日志如何(How)进行归档。示例中采纳 defaultRolloverStrategy
。
appenders: rollingFile: defaultRolloverStrategy: max: 100
与下面的 Policy 配合,能够实现每天最多生成 100 个日志文件,如果单个日志文件体积曾经超过 20 MB,就从新生成新的日志文件,并将该日志文件归档解决。单日最多可生成 100 个,由 max
参数管制。
其余 Strategy 相干文档可参考:Log4j2 官网文档 Strategy 局部。
Logger
Logger 能够了解成路由器,用来指定类或包中产生的日志信息进入哪个管道。
- RootLogger(必须配置)
- Logger
其它 Logger 相干文档可参考:Log4j2 官网文档 Logger 局部。
总结
这里贴出一份较为残缺的配置计划,供小伙伴们参考。次要实现了以下两点性能:
- 控制台打印黑白日志。
- 以天为单位进行日志文件归档。
configuration: name: log4j2YamlConfig status: error # 属性 properties: property: name: projectName value: demo # 管道 appenders: # 控制台 console: name: console patternLayout: pattern: "%d{DEFAULT} %highlight{%5level} %pid --- %highlight{%c}{STYLE=Logback} : %msg%n" # 滚动文件 rollingFile: name: rollingFile fileName: log/${projectName}.log filePattern: log/backup/$${date:yyyy-MM}/%d{yyyy-MM-dd}_${projectName}_%i.log patternLayout: pattern: "%d{DEFAULT} %5level %pid --- %c : %msg%n" policies: sizeBasedTriggeringPolicy: size: 20 MB timeBasedTriggeringPolicy: interval: 1 defaultRolloverStrategy: max: 100 filters: thresholdFilter: # 日志级别 >= error level: error onMatch: accept onMismatch: deny # 路由 loggers: root: # 日志级别 >= info level: info appenderRef: - ref: console - ref: rollingFile