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

文章目录


前言

通常我们项目中控制台能显示输出系统运行的日志,但是当我们的项目部署到线上环境的时候,我们一般需要要将日志记录保存成日志文件,方便线上排查问题和调试,此篇主要介绍如何通过配置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 复制代码
<?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来作为日志实现框架,配置有一定的区别,不在此介绍,请参考官网说明。

相关推荐
掘金-我是哪吒34 分钟前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪1 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm1 小时前
spring事件使用
java·后端·spring
微风粼粼1 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄1 小时前
设计模式之中介者模式
java·设计模式·中介者模式
rebel2 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温3 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2743 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba3 小时前
Maven
java·maven
张人玉4 小时前
C# 常量与变量
java·算法·c#