当前位置: 首页 > news >正文

Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志:Log4j2 基本概念;Log4j2 多环境日志配置策略

Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志:Log4j2 基本概念;Log4j2 多环境日志配置策略

  • Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志
    • 日志配置
      • 1. Log4j2 基本概念
      • 2. Log4j2 多环境日志配置策略
      • 3. 配置实践
        • 修改配置文件
        • log4j2-spring-dev.xml
        • log4j2-spring-test.xml
        • log4j2-spring-prod.xml

Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志


日志配置

在企业级 Java 应用中,日志不仅用于排查问题,也用于业务监控、性能分析和审计。不同环境(开发、测试、生产)的日志需求各不相同:

  • 开发环境:需要详细调试信息(DEBUG/TRACE),同时希望在控制台可见。
  • 测试环境:日志比开发环境少,但需要持久化到文件,以便排查问题。
  • 生产环境:日志主要关注 WARN/ERROR,日志文件需要按日期和大小滚动,保证长期可追溯,同时避免占满磁盘。

本文将详细讲解如何使用 Log4j2 配置多环境日志,以及如何管理滚动文件和日志级别。

1. Log4j2 基本概念

Log4j2 主要由以下几个部分组成:

  • Logger:日志记录器,用于在代码中调用日志方法。
  • Appender:日志输出器,决定日志输出到控制台、文件或远程系统。
  • Layout:日志输出格式,例如普通文本、JSON。
  • Filter:日志过滤器,用于控制哪些日志可以输出。

日志级别优先级(高到低):
OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL


2. Log4j2 多环境日志配置策略

不同环境可以使用不同配置文件,例如:

环境文件名输出日志级别
开发log4j2-spring-dev.xml控制台 + 测试文件DEBUG
测试log4j2-spring-test.xml文件输出INFO
生产log4j2-spring-prod.xml滚动文件INFO/WARN/ERROR

优点

  • 配置独立,互不影响
  • 无需在同一文件中使用条件判断
  • 环境切换简单:通过 Spring Boot 的 spring.profiles.active 配合 logging.config 指定对应的配置文件,例如:
spring:profiles:active: dev  # 当前激活环境
logging:config: classpath:log/log4j2-spring-${spring.profiles.active}.xml

Spring Boot 会根据 ${spring.profiles.active} 自动加载对应的 Log4j2 配置文件,实现多环境日志配置。


3. 配置实践

修改配置文件
spring:application:name: spring-boot-demo-2.7.18profiles:active: devconfig:# 导入连接池配置import: datasource/datasource-${spring.profiles.active}.yml
logging:config: classpath:log/log4j2-spring-${spring.profiles.active}.xml
log4j2-spring-dev.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--==========================================================Log4j2 日志配置==========================================================日志级别优先级(高到低):OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL- OFF:关闭日志- FATAL:严重错误,系统崩溃- ERROR:业务错误,可继续运行- WARN:警告信息- INFO:一般信息- DEBUG:开发调试- TRACE:最详细日志- ALL:记录所有日志
--><!--configuration:Log4j2 根节点,全局配置属性:- status:Log4j2 内部日志级别可选值:OFF | FATAL | ERROR | WARN | INFO | DEBUG | TRACE- monitorInterval:配置热加载间隔(秒),0表示禁用- packages:自定义插件扫描包
-->
<configuration status="WARN" monitorInterval="30"><!-- ==========================================================一、Appender(日志输出器)==========================================================Appender 定义日志输出目标及格式常用类型:- Console:输出到控制台- File:普通文件- RollingFile:支持按时间/大小滚动--><appenders><!-- ===================== 控制台输出(开发专用) ===================== --><Console name="Console" target="SYSTEM_OUT"><!-- PatternLayout 定义日志输出格式 --><!--常用占位符:%d{yyyy-MM-dd HH:mm:ss.SSS} 时间%pid 进程ID%t/%T 线程名/线程ID%X{traceId}, %X{spanId} MDC 链路追踪%level 日志级别%c 类名%msg 日志内容%throwable 异常堆栈--><PatternLayoutpattern="%style{[%d{yyyy-MM-dd HH:mm:ss.SSS}]}{CYAN} %style{[PID=%pid]}{MAGENTA} %style{[thread=%t, id=%T]}{BLUE} %style{[traceId=%X{traceId}, spanId=%X{spanId}]}{BLUE} %highlight{%style{[%level]}{BRIGHT}} %style{---}{DEFAULT} %highlight{%style{%c}{BRIGHT}} : %msg%n%throwable"disableAnsi="false"noConsoleNoAnsi="false"charset="UTF-8"/><!-- ThresholdFilter 过滤日志级别 --><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- ===================== 测试文件输出(调试专用) ===================== --><File name="Test" fileName="logs/test.log" append="false" bufferedIO="true" immediateFlush="true"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- ======================= INFO 日志滚动文件 ======================= --><RollingFile name="RollingFileInfo"fileName="logs/info.log"filePattern="logs/%d{yyyy-MM-dd}/info-%i.log.gz"><!-- 仅记录 INFO 及以下级别 --><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><!-- 每天凌晨滚动 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!-- 文件超过 100MB 自动滚动 --><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- 每天最多保留 5 个文件,超出删除最旧 --><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= WARN 日志滚动文件 ======================= --><RollingFile name="RollingFileWarn"fileName="logs/warn.log"filePattern="logs/%d{yyyy-MM-dd}/warn-%i.log.gz"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= ERROR 日志滚动文件 ======================= --><RollingFile name="RollingFileError"fileName="logs/error.log"filePattern="logs/%d{yyyy-MM-dd}/error-%i.log.gz"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile></appenders><!-- ==========================================================二、Logger(日志记录器)==========================================================Logger 定义不同包/类的日志输出规则--><loggers><!-- ======================= 第三方包日志过滤 ======================= --><logger name="com.alibaba" level="WARN"/><logger name="com.baomidou" level="WARN"/><logger name="com.ulisesbocchio.jasyptspringboot" level="WARN"/><logger name="springfox.documentation" level="WARN"/><logger name="org.hibernate.validator" level="ERROR"/><!-- ======================= 根日志器 ======================= --><!-- Root Logger:全局日志入口 --><!--属性:- level:全局日志输出级别可选值:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, ALL, OFF- additivity:是否继承父 Logger(默认 true)--><root level="all"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/><appender-ref ref="Test"/></root></loggers></configuration>
log4j2-spring-test.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--==========================================================Log4j2 日志配置==========================================================日志级别优先级(高到低):OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL- OFF:关闭日志- FATAL:严重错误,系统崩溃- ERROR:业务错误,可继续运行- WARN:警告信息- INFO:一般信息- DEBUG:开发调试- TRACE:最详细日志- ALL:记录所有日志
--><!--configuration:Log4j2 根节点,全局配置属性:- status:Log4j2 内部日志级别可选值:OFF | FATAL | ERROR | WARN | INFO | DEBUG | TRACE- monitorInterval:配置热加载间隔(秒),0表示禁用- packages:自定义插件扫描包
-->
<configuration status="WARN" monitorInterval="30"><!-- ==========================================================一、Appender(日志输出器)==========================================================Appender 定义日志输出目标及格式常用类型:- Console:输出到控制台- File:普通文件- RollingFile:支持按时间/大小滚动--><appenders><!-- ===================== 控制台输出(开发专用) ===================== --><Console name="Console" target="SYSTEM_OUT"><!-- PatternLayout 定义日志输出格式 --><!--常用占位符:%d{yyyy-MM-dd HH:mm:ss.SSS} 时间%pid 进程ID%t/%T 线程名/线程ID%X{traceId}, %X{spanId} MDC 链路追踪%level 日志级别%c 类名%msg 日志内容%throwable 异常堆栈--><PatternLayoutpattern="%style{[%d{yyyy-MM-dd HH:mm:ss.SSS}]}{CYAN} %style{[PID=%pid]}{MAGENTA} %style{[thread=%t, id=%T]}{BLUE} %style{[traceId=%X{traceId}, spanId=%X{spanId}]}{BLUE} %highlight{%style{[%level]}{BRIGHT}} %style{---}{DEFAULT} %highlight{%style{%c}{BRIGHT}} : %msg%n%throwable"disableAnsi="false"noConsoleNoAnsi="false"charset="UTF-8"/><!-- ThresholdFilter 过滤日志级别 --><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- ===================== 测试文件输出(调试专用) ===================== --><File name="Test" fileName="logs/test.log" append="false" bufferedIO="true" immediateFlush="true"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- ======================= INFO 日志滚动文件 ======================= --><RollingFile name="RollingFileInfo"fileName="logs/info.log"filePattern="logs/%d{yyyy-MM-dd}/info-%i.log.gz"><!-- 仅记录 INFO 及以下级别 --><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><!-- 每天凌晨滚动 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!-- 文件超过 100MB 自动滚动 --><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- 每天最多保留 5 个文件,超出删除最旧 --><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= WARN 日志滚动文件 ======================= --><RollingFile name="RollingFileWarn"fileName="logs/warn.log"filePattern="logs/%d{yyyy-MM-dd}/warn-%i.log.gz"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= ERROR 日志滚动文件 ======================= --><RollingFile name="RollingFileError"fileName="logs/error.log"filePattern="logs/%d{yyyy-MM-dd}/error-%i.log.gz"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile></appenders><!-- ==========================================================二、Logger(日志记录器)==========================================================Logger 定义不同包/类的日志输出规则--><loggers><!-- ======================= 第三方包日志过滤 ======================= --><logger name="com.alibaba" level="WARN"/><logger name="com.baomidou" level="WARN"/><logger name="com.ulisesbocchio.jasyptspringboot" level="WARN"/><logger name="springfox.documentation" level="WARN"/><logger name="org.hibernate.validator" level="ERROR"/><!-- ======================= 根日志器 ======================= --><!-- Root Logger:全局日志入口 --><!--属性:- level:全局日志输出级别可选值:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, ALL, OFF- additivity:是否继承父 Logger(默认 true)--><root level="all">
<!--            <appender-ref ref="Console"/>--><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/><appender-ref ref="Test"/></root></loggers></configuration>
log4j2-spring-prod.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--==========================================================Log4j2 日志配置==========================================================日志级别优先级(高到低):OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL- OFF:关闭日志- FATAL:严重错误,系统崩溃- ERROR:业务错误,可继续运行- WARN:警告信息- INFO:一般信息- DEBUG:开发调试- TRACE:最详细日志- ALL:记录所有日志
--><!--configuration:Log4j2 根节点,全局配置属性:- status:Log4j2 内部日志级别可选值:OFF | FATAL | ERROR | WARN | INFO | DEBUG | TRACE- monitorInterval:配置热加载间隔(秒),0表示禁用- packages:自定义插件扫描包
-->
<configuration status="WARN" monitorInterval="30"><!-- ==========================================================一、Appender(日志输出器)==========================================================Appender 定义日志输出目标及格式常用类型:- Console:输出到控制台- File:普通文件- RollingFile:支持按时间/大小滚动--><appenders><!-- ===================== 控制台输出(开发专用) ===================== --><Console name="Console" target="SYSTEM_OUT"><!-- PatternLayout 定义日志输出格式 --><!--常用占位符:%d{yyyy-MM-dd HH:mm:ss.SSS} 时间%pid 进程ID%t/%T 线程名/线程ID%X{traceId}, %X{spanId} MDC 链路追踪%level 日志级别%c 类名%msg 日志内容%throwable 异常堆栈--><PatternLayoutpattern="%style{[%d{yyyy-MM-dd HH:mm:ss.SSS}]}{CYAN} %style{[PID=%pid]}{MAGENTA} %style{[thread=%t, id=%T]}{BLUE} %style{[traceId=%X{traceId}, spanId=%X{spanId}]}{BLUE} %highlight{%style{[%level]}{BRIGHT}} %style{---}{DEFAULT} %highlight{%style{%c}{BRIGHT}} : %msg%n%throwable"disableAnsi="false"noConsoleNoAnsi="false"charset="UTF-8"/><!-- ThresholdFilter 过滤日志级别 --><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- ===================== 测试文件输出(调试专用) ===================== --><File name="Test" fileName="logs/test.log" append="false" bufferedIO="true" immediateFlush="true"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- ======================= INFO 日志滚动文件 ======================= --><RollingFile name="RollingFileInfo"fileName="logs/info.log"filePattern="logs/%d{yyyy-MM-dd}/info-%i.log.gz"><!-- 仅记录 INFO 及以下级别 --><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><!-- 每天凌晨滚动 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/><!-- 文件超过 100MB 自动滚动 --><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- 每天最多保留 5 个文件,超出删除最旧 --><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= WARN 日志滚动文件 ======================= --><RollingFile name="RollingFileWarn"fileName="logs/warn.log"filePattern="logs/%d{yyyy-MM-dd}/warn-%i.log.gz"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile><!-- ======================= ERROR 日志滚动文件 ======================= --><RollingFile name="RollingFileError"fileName="logs/error.log"filePattern="logs/%d{yyyy-MM-dd}/error-%i.log.gz"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [thread=%t, id=%T] [traceId=%X{traceId}, spanId=%X{spanId}] - %c - %m%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><DefaultRolloverStrategy max="5"/></RollingFile></appenders><!-- ==========================================================二、Logger(日志记录器)==========================================================Logger 定义不同包/类的日志输出规则--><loggers><!-- ======================= 第三方包日志过滤 ======================= --><logger name="com.alibaba" level="WARN"/><logger name="com.baomidou" level="WARN"/><logger name="com.ulisesbocchio.jasyptspringboot" level="WARN"/><logger name="springfox.documentation" level="WARN"/><logger name="org.hibernate.validator" level="ERROR"/><!-- ======================= 根日志器 ======================= --><!-- Root Logger:全局日志入口 --><!--属性:- level:全局日志输出级别可选值:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, ALL, OFF- additivity:是否继承父 Logger(默认 true)--><root level="all">
<!--            <appender-ref ref="Console"/>--><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/>
<!--            <appender-ref ref="Test"/>--></root></loggers></configuration>
http://www.dtcms.com/a/600550.html

相关文章:

  • Vue 列表渲染完全指南:v-for 核心用法、key 原理及数据监测实战(附代码案例)
  • webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
  • 如何在电商上购物网站企业咨询管理是干嘛的
  • 重庆大型的网站建设企业社交网站定制
  • 门户网站设计运城市网站建设公司
  • 网站 公司备案与个人备案如何用群晖做自己的网站
  • 商务网站建设实训报告1500字炫酷文字制作网站
  • 给你一个网站你怎么做的网站建设的风格
  • 手机网站和微信网站有哪些opensearch wordpress
  • 餐饮公司网站建设的特点中山网站建设的公司
  • 青岛网站设计多少钱苏州工业园区两学一做教育网站
  • 做网站的备案外包服务公司排名
  • 做网站淮南请人开发一个app要多少钱
  • 个人做论坛网站需要哪些备案.net 企业网站源码
  • 广州手机网站定制信息一个app软件
  • 做网站莱芜短视频推广引流方案
  • 建一个商城网站需要多久小程序游戏排行榜2023
  • 购物网站单页模板新媒体如何运营推广
  • 小说盗版网站怎么做郑州seo招聘
  • 网站建设规划模板内江如何做百度的网站
  • 旅游网站开发说明青岛即墨网站网页设计
  • 网站服务器买了后怎么做汕头服饰网站建设
  • 有什么好的提供外链网站lnmp wordpress建设多网站
  • 什么摄像头做直播网站seo技巧与技术
  • 做网站标题居中代码大学生创业项目
  • 网站制作公司哪儿济南兴田德润有活动吗保定企业建站程序
  • 简单响应式网站设计代码龙岗网站维护
  • 北京快速网站建设商城首页网站
  • 内贸网站有多少宣传产品网站
  • 设计网站 f德州网页设计师培训