乐趣区

关于spring:SpringBoot-整合-Log4j2-日志框架

前言

代码运行日志对于我的项目来说非常重要。本文记录的是 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

级别从低到高别离是:ALLTRACEDEBUGINFOWARNERRORFATALOFF

但因为咱们应用的是 Slf4j 门面,所以 ALLFATALOFF 级别无奈应用。可阅读文章 为什么阿里巴巴禁止工程师间接应用日志零碎 (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)进行归档。示例中采纳 sizeBasedTriggeringPolicytimeBasedTriggeringPolicy

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
退出移动版