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

六.logback记录日志文件并按大小日期分割文件

文章目录

  • 前言
  • 一、`log4j,log4j2,logback,slf4j`的关系?
  • 二、使用`logback`配置自定义日志记录
    • 1.引入库
    • 2.创建配置文件`logback-spring.xml`
    • 3.配置示例如下
  • 总结


前言

通常我们项目中控制台能显示输出系统运行的日志,但是当我们的项目部署到线上环境的时候,我们一般需要要将日志记录保存成日志文件,方便线上排查问题和调试,此篇主要介绍如何通过配置springboot默认的日志框架logback来记录日志文件。


配置前先通俗点解释下日志框架

一、log4j,log4j2,logback,slf4j的关系?

这里通俗的一句话概括就是slf4j是一个抽象层的日志框架,它只负责定规范,不负责具体实现,那么其他的log4j,log4j2,logback就是slf4j的实现层框架;

Spring Boot默认使用SLF4J作为日志门面,并且默认集成了Logback日志实现框架

平常使用的时候就只需要调用slf4j接口即可,无需关心其具体实现,并且我们可以随意切换或配置不同的实现层框架。

二、使用logback配置自定义日志记录

1.引入库

这里我们使用的是logback,由于spring boot默认在spring-boot-starter包中就包含了该包的引用,所以无需再额外引入

2.创建配置文件logback-spring.xml

由于我们需要记录项目中所有模块的日志,故我们将配置文件放在light-common模块中,在resources目录中创建该配置文件,结构如图:
在这里插入图片描述

3.配置示例如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引用默认日志配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--使用默认的控制台日志输出实现-->
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!-- 应用名称 -->
    <springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="springBoot"/>

    <!-- 日志文件名称前缀,spring-boot-admin监控时要与yml配置的Actuator监控日志一致 -->
    <property name="log.file.prefix" value="${spring.application.name}"/>
    <!-- 日志文件路径 -->
    <property name="log.path" value="./logs"/>
    <!-- 日志最大的历史保留天数 -->
    <property name="maxHistory" value="7"/>
    <!-- 日志最大文件大小 -->
    <property name="maxFileSize" value="10MB"/>
    <!-- 字符集 -->
    <property name="charset" value="UTF-8"/>

    <!-- DEBUG 日志输出到文件 -->
    <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <!--设置为默认的文件日志格式-->
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${charset}</charset>
        </encoder>
        <!--滚动策略,SizeAndTimeBasedRollingPolicy必须加上maxFileSize属性-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志默认压缩路径,将超过指定文件大小的日志,进行存档,%d{yyyy-MM,aux}这个aux表示该%d是辅助配置,不需要按照此滚动打包,这样logback就可以按照后面的%d{yyyy-MM-dd}每日滚动打包 -->
            <fileNamePattern>${log.path}/%d{yyyy-MM,aux}/${log.file.prefix}-debug.%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <maxFileSize>${maxFileSize}</maxFileSize>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- ERROR 日志输出到文件 -->
    <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>
        <encoder>
            <!--设置为默认的文件日志格式-->
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${charset}</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志默认压缩路径,将超过指定文件大小的日志,进行存档,%d{yyyy-MM,aux}这个aux表示该%d是辅助配置,不需要按照此滚动打包,这样logback就可以按照后面的%d{yyyy-MM-dd}每日滚动打包 -->
            <fileNamePattern>${log.path}/%d{yyyy-MM,aux}/${log.file.prefix}-error.%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <maxFileSize>${maxFileSize}</maxFileSize>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 控制框架输出日志 -->
    <logger name="org.mybatis" level="INFO"/>
    <logger name="springfox" level="INFO"/>

    <!-- 根日志配置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="file_debug"/>
        <appender-ref ref="file_error"/>
    </root>
</configuration>

总结

此文主要使用logback来记录日志,并结合自身项目需求来进行配置,如需使用其他log4j,log4j2来作为日志实现框架,配置有一定的区别,不在此介绍,请参考官网说明。


http://www.kler.cn/a/540725.html

相关文章:

  • 尝试一下,交互式的三维计算python库,py3d
  • DeepSeek 实践总结
  • 【网络安全】服务器安装Docker及拉取镜像教程
  • 【韩顺平linux】部分上课笔记整理
  • 黑马React保姆级(PPT+笔记)
  • 物品匹配问题-25寒假牛客C
  • 操作系统调度算法解析(SJF)
  • EtherNet/IP转Modbus TCP实现三菱变频器与西门子PLC通讯的配置案例
  • 从零复现DeepSeek R1:从V3中对MoE、MLA、MTP的实现,到Open R1对R1中SFT、GRPO的实现
  • ESP8266配置为TCP客户端,连接电脑和手机(使用Arduino配置)
  • javaEE-10.CSS入门
  • 【Elasticsearch】管道聚合
  • SpringBoot源码解析(十):应用上下文AnnotationConfigServletWebServerApplicationContext构造方法
  • 相对收益-固定收益组合归因-前言
  • 纯前度(vue)实现对pdf\mp4\png\jpg\jpegxls\doc\txt文件预览,无需要转化
  • Android图片加载框架Coil,Kotlin
  • 国税局发票查验中英文验证码识别,识别率99.99%
  • 十四. Redis 新功能
  • day10-字符串
  • Spring Boot 与 Kafka 实现高效消息队列通信的最佳实践
  • flutter ListView Item复用源码解析
  • 亲自测试并推荐的第三方平台使用DeepSeek 和 LM Studio 本地部署DeepSeek
  • AI刷题-子数组和的最大值问题
  • 【Java 面试 八股文】Redis篇
  • 数字电路-基础逻辑门实验
  • Day 32 卡玛笔记