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