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

Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)

全部配置

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><property name="LOG_HOME" value="log"/><property name="LOG_NAME" value="admin"/><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><property name="CONSOLE_LOG_PATTERN"value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) [%X{traceid}] %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><property name="FILE_LOG_PATTERN"value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} [%X{traceid}] ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/><logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/><logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/><logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/><logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/><logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/><logger name="org.hibernate.validator.internal.util.Version" level="WARN"/><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${LOG_NAME}-info.%d{yyyy-MM-dd}.%i.log</FileNamePattern><MaxFileSize>100MB</MaxFileSize><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${FILE_LOG_PATTERN}</pattern></encoder></appender><appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${LOG_NAME}-error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><MaxFileSize>100MB</MaxFileSize><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${FILE_LOG_PATTERN}</pattern></encoder></appender><!-- 日志输出级别 --><root level="INFO"><appender-ref ref="FILE"/><appender-ref ref="FILE_ERROR"/><appender-ref ref="STDOUT"/></root>
</configuration>

2. 定义日志参数

<property name="LOG_HOME" value="log"/>
<property name="LOG_NAME" value="admin"/>
  • LOG_HOME: 日志打印存放在服务器的位置
  • LOG_NAME: 日志文件名称(用于区分项目)
    • 如admin,文件名为admin-info.2024-12-17.0.log和admin-error.2024-12-17.0.log

3. 日志格式

<property name="CONSOLE_LOG_PATTERN"value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) [%X{traceid}] %clr(%t){cyan} %clr(:){faint} %m%n"/>
<property name="FILE_LOG_PATTERN"value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%X{traceid}] %t : %m%n"/>

控制台和文件的日志输出格式分别定义,确保输出内容既清晰又易读。格式化内容包括:

  • %d{}
    • 格式:%d{yyyy-MM-dd HH:mm:ss.SSS}
    • 含义:记录日志的时间戳,格式化为 年-月-日 小时:分钟:秒.毫秒
    • 动态属性:${LOG_DATEFORMAT_PATTERN},支持配置化日期格式,默认为 yyyy-MM-dd HH:mm:ss.SSS
  • %clr()
    • 含义:为控制台输出添加颜色区分。{faint}, {magenta}, {cyan} 等指定不同的颜色样式。
    • 例如:%clr(${PID:- }){magenta} 用洋红色显示进程 ID。
  • %5p
    • 含义:显示日志级别(如 INFO、ERROR)。%5p 表示固定宽度为 5 个字符,右对齐。
  • [%X{traceid}]
    • 含义:显示上下文变量 traceid 的值。
    • 用法:通过 MDC.put("traceid", "value") 在日志记录中注入 traceid
  • %t%15.15t
    • 含义:显示线程名称。
    • %15.15t 表示线程名称固定宽度为 15 个字符,超出部分会截断。
  • %-40.40logger{39}
    • 含义:记录日志的类名,显示宽度范围为 40 个字符。
    • {39} 指定类名路径最大为 39 层。
  • %m%n
    • %m:日志消息内容。
    • %n:换行符。
  • ${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
    • 含义:异常栈信息的格式化输出,默认为 Logback 的 WhitespaceThrowableProxyConverter
3.1 生成traceid
import com.applets.manager.core.constant.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;/*** @author zr*/
@Component
@Slf4j
@Order(1)
public class TraceFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {MDC.put(Constants.TRACE_ID, this.getTraceId(request));filterChain.doFilter(request, response);}private String getTraceId(HttpServletRequest request) {String traceId = request.getHeader(Constants.TRACE_ID);if (StringUtils.isEmpty(traceId)) {traceId = UUID.randomUUID().toString();}return traceId;}
}
public class Constants {public static final String TRACE_ID = "traceid";/*** 构造函数私有化,避免被实例化*/private Constants() {}}

4. 日志级别与输出

<root level="INFO"><appender-ref ref="FILE"/><appender-ref ref="FILE_ERROR"/><appender-ref ref="STDOUT"/>
</root>

根日志记录器设置为 INFO 级别,并将日志分别输出到文件和控制台:

  • STDOUT: 控制台输出,方便开发时实时查看。
  • FILE: 记录 INFO 及以上级别的日志到文件。
  • FILE_ERROR: 专门记录 ERROR 级别日志,便于快速定位严重问题。

5. 文件滚动策略

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/${LOG_NAME}-info.%d{yyyy-MM-dd}.%i.log</FileNamePattern><MaxFileSize>100MB</MaxFileSize><MaxHistory>30</MaxHistory>
</rollingPolicy>
  • MaxFileSize:表示单个日志文件的最大大小。当日志文件达到 100MB 时,它将被滚动,生成一个新的文件。这个参数确保日志文件不会因为过大而占用过多的磁盘空间,避免出现性能问题。
  • MaxHistory:表示保留的最大日志历史天数。这里设置为 30,意味着系统会保留过去 30 天的日志文件。超过 30 天的日志文件将被自动删除,从而节省存储空间。这个设置防止了日志文件积累过多,确保只有最近的日志会被保存。

6. 实际日志实例

2024-12-19 16:31:44.222  INFO [39a89345-5f86-4ddd-9d68-96ae5cffd126] 15763 --- [http-nio-8081-exec-2] c.v.manager.api.filter.TraceFilter       : 清除用户数据
  • 时间戳2024-12-19 16:31:44.222
  • 日志级别INFO
  • traceid39a89345-5f86-4ddd-9d68-96ae5cffd126
  • 进程 ID15763
  • 线程名称http-nio-8081-exec-2
  • 日志类路径c.v.manager.api.filter.TraceFilter
  • 日志消息清除用户数据
http://www.lryc.cn/news/506932.html

相关文章:

  • 《计算机组成及汇编语言原理》阅读笔记:p1-p8
  • 【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现
  • 在 Ubuntu 上安装 MySQL 的详细指南
  • Java 优化springboot jar 内存 年轻代和老年代的比例 减少垃圾清理耗时 如调整 -XX:NewRatio
  • 嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏
  • 在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。
  • 【windows】sonarqube起不来的问题解决
  • golang异常
  • 搭建MongoDB
  • Android中坐标体系知识超详细讲解
  • 不需要服务器,使用netlify快速部署自己的网站
  • Swin transformer 论文阅读记录 代码分析
  • 信息安全概论
  • 2024年12月16日Github流行趋势
  • Go 1.24即将到来!
  • FFmpeg库之ffplay
  • scala中模式匹配的应用
  • WebRTC搭建与应用(一)-ICE服务搭建
  • 【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
  • Kafka学习篇
  • 冬日养仓鼠小指南:温暖与陪伴同行
  • 【计算机视觉基础CV】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
  • Python爬虫之代理的设置
  • Canoe E2E校验自定义Checksum算法
  • [HNCTF 2022 Week1]你想学密码吗?
  • 端到端自动驾驶大模型:视觉-语言-动作模型 VLA
  • druid与pgsql结合踩坑记
  • 【xxl-job】XXL-Job源码深度剖析:分布式任务调度的艺术与实践
  • 图漾相机-ROS1_SDK_ubuntu版本编译(新版本)
  • 项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%