SpringBoot 整合 Log4j2 日志框架

曾是然 2021-01-22 01:13:38
SpringBoot 日志 log 整合 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
版权声明
本文为[曾是然]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000039055677

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云