【Spring】日志配置、日志持久化、配置文件分割、日志格式

日志配置

上述是日志的使用,日志框架支持我们更灵活的输出日志,包括内容、格式等

配置日志级别

日志级别配置只需要在配置文件中设置“logging.level”配置即可,如下所示

logging:   
  level:   
    root: debug

日志持久化

以上的日志都是输出在控制台上的,然而在线上的环境中,我们需要把日志保存下来,以便出现问题之后追溯问题。把日志保存下来就叫持久化

日志持久化有两种方式

  1. 配置日志文件名
  2. 配置日志的存储目录
    image.png

相关配置

配置日志文件的路径和文件名

logging:
  file:  
    name: logger/springboot.log
  • 运行结果显示,日志内容保存在了对应目录下image.png

配置日志文件的保存路径

# 设置日志文件的目录
logging:
  file:  
    name: /Users/yechiel/Desktop
  • 这种方式只能设置日志的路径,文件名为固定的 spring.log
  • 运行程序,该路径下出现了一个日志文件image.png|124

注意

  • logging.file.namelogging.file.path 两个都配置的情况下,只生效其一,以 logging.file.name 为准

配置文件分割

如果我们的日志都放在一个文件中,随着项目的运行,日志文件会越来越大,需要对日志文件进行分割

  • 当然,日志框架也帮我考虑到了这一点,所以如果不进行配置,就走自动配置
  • 默认日志文件超过 10M 就进行分割
配置项说明默认值
logging. logback. rollingpolicy. file-name-pattern日志分割后的文件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging. logback. rollingpolicy. max-file-size日志文件超过这个大小就自动分割10MB

配置文件分割:

logging:
  logback:  
  rollingpolicy:  
    file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i  
    max-file-size: 1KB
  1. 日志文件超过 1KB 就分割(设置 1KB 是为了更好展示。企业开发通常设置为 200MB500MB 等,此处没有明确标准)
  2. 分割后的日志文件名为:日志名.日期.索引

运行项目,多打印一些日志,日志分割结果:image.png|303

配置日志格式

目前打印的格式是默认的image.png

打印日志的格式,也是支持配置的。支持控制台和日志文件分别设置

配置项说明默认值
logging. pattern. console控制台日志格式%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX}}){faint}%clr(${LOG_LEVEL_PATTERN:-%5p})%clr(${PID:-}){magenta}%clr(---){faint}%clr([%15.15t]){faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
logging. pattern. file日志文件的日志格式%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX}}${LOG_LEVEL_PATTERN:-%5p}${PID:-} ---[%t]%-40.40logger{39}: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
配置项说明:
  1. %clr (表达式){颜色}设置输入日志的颜色
    • blue
    • cyan
    • faint
    • green
    • magenta
    • red
    • yellow
  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX}} 日期和时间——精确到毫秒
    • %d{} 日期
    • ${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX} 非空表达式,获取系统属性 LOG_DATEFORMAT_PATTERN。若此属性不存在,则使用 -yyyy-MM- dd'T'HH:mm:ss.SSSXXX 格式。系统属性可以通过 System.getProperty("LOG_DATEFORMAT_PATTERN") 获取
  3. %5p 显示日志级别 errorwarninfodebugtrace
  4. %t 线程名;%c 类的全限定名;%M method;%L 为行号;%thread 线程名称;%m 或者 %msg 显示输出消息;%n 换行符
  5. %5 若字符⻓度⼩于 5,则右边⽤空格填充。%-5 若字符⻓度⼩于 5,则左边⽤空格填充。%.15 若字符⻓度超过 15,截去多余字符。%15.15 若字符⻓度⼩于 15,则右边⽤空格填充。若字符⻓度超过 15,截去多余字符

设置了颜色,但没有生效?
需要配置,让 idea 支持控制台颜色显示

  1. 打开启动配置,添加 VM optionimage.png
  1. 添加 VM option -Dspring.out.ansj.enabled=ALWAYSimage.png
  2. 重新启动程序,就会发现控制台支持颜色了

配置文件

logging:
  pattern:  
    console:  '%d{yyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'  
    file:  '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  • 项目运行,观察日志变化:image.png

更简单的日志输出

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加一遍,Lombok 给我们提供了一种更简单的方式

  1. 添加 Lombok 框架支持
  2. 使用 @Slf4j 注解输出日志

添加 lombok 依赖

<dependency>  
    <groupId>org.projectlombok</groupId>  
    <artifactId>lombok</artifactId>  
    <optional>true</optional>  
</dependency>

输出日志

import lombok.extern.slf4j.Slf4j;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
@Slf4j  
public class LogController {  
    public void log() {  
        log.info("========要输出日志的内容========");  
    }  
}

lombok 提供的 @Slf4j 会帮我们提供一个日志对象 log,我们直接使用就可以image.png

总结

  1. 日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,SpringBoot 内置了日志框架,默认使用的是 info 日志级别将日志输出到控制台的,我们可以通过 Lombok 提供的 @Slf4j 注解和 log 对象快速的打印自定义日志
  2. 日志包含了 6 个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志持久化
<think>好的,我现在需要帮助用户解决在Spring Boot中配置日志持久化的问题。首先,我得回忆一下Spring Boot的日志处理机制。记得Spring Boot默认使用Logback作为日志框架,所以用户的问题应该和Logback的配置有关。 用户提到的是日志持久化,也就是将日志信息保存到文件中,而不是仅仅输出到控制台。根据之前的引用内容,特别是引用[3]中提到的日志持久化分割配置,我需要找出如何配置Logback来实现这一点。 首先,Spring Boot的配置文件application.properties或application.yml可以用来设置一些基本的日志路径和级别。例如,用户可能需要在application.properties里设置logging.file.name或logging.file.path。不过更复杂的配置可能需要自定义logback-spring.xml文件,因为这样可以更灵活地控制滚动策略、文件分割等。 记得引用[2]中提到过,MyBatis的SQL日志可以通过配置log-impl来输出,但这里用户关心的是持久化,所以重点在文件appender的配置。Logback的配置文件里需要定义一个FileAppender或者 RollingFileAppender,后者支持按时间或大小分割日志文件。 另外,引用[3]里提到了日志分级和持久化配置步骤,可能需要设置不同的Appender对应不同的日志级别,或者将不同包的日志输出到不同文件。不过用户的问题主要是持久化,所以核心是确保日志被写入文件,并且可能按规则分割。 我需要给出示例配置,比如在logback-spring.xml中定义RollingFileAppender,设置文件路径,滚动策略(比如按日期或文件大小),以及日志格式。同时,提醒用户注意在application.properties中设置logging.config指向自定义配置文件,或者在src/main/resources下直接放置logback-spring.xml让Spring Boot自动识别。 还需要考虑是否需要将不同环境(如开发、生产)的日志配置分开,或者使用Spring Profile来管理不同的日志配置。不过可能对于用户当前的问题,基础的配置文件示例就足够了。 另外,可能存在的误区是用户可能只配置了控制台输出,而没有启用文件Appender,所以需要明确说明如何添加文件Appender到root logger中,确保日志同时输出到文件和控制台,或者只输出到文件。 最后,验证配置是否正确的方法,比如运行应用后检查指定目录下是否生成日志文件,并确认日志内容正确写入。可能还需要提醒用户检查文件权限和路径是否存在,避免因权限问题导致日志无法写入。</think>在Spring Boot中实现日志持久化主要依赖Logback配置文件,通过文件输出策略将日志写入磁盘文件。以下是配置示例和实现步骤: ### 一、基础配置方案(application.properties) ```properties # 指定日志输出路径和文件名 logging.file.name=/var/log/myapp/application.log # 设置日志文件最大尺寸(默认10MB) logging.file.max-size=50MB # 保留历史日志天数(默认7天) logging.file.max-history=30 # 设置日志格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n ``` ### 二、高级配置方案(logback-spring.xml) 在`src/main/resources`下创建配置文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <!-- 文件输出格式 --> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 滚动文件输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/application.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/application-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>50MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration> ``` 该配置实现: 1. 日志文件按日期和序号滚动(例如:application-2023-08-01.0.log) 2. 单文件超过50MB自动分割 3. 保留最近30天日志 4. 总日志量不超过5GB[^3] ### 三、生产环境推荐配置 ```xml <!-- 按日志级别分离存储 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/error.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>90</maxHistory> </rollingPolicy> </appender> <!-- SQL日志单独存储 --> <logger name="org.hibernate.SQL" level="DEBUG" additivity="false"> <appender-ref ref="SQL_FILE"/> </logger> ``` ### 四、验证配置有效性 1. 检查`logs/`目录是否自动生成 2. 执行测试代码: ```java @SpringBootTest class LogTest { private static final Logger logger = LoggerFactory.getLogger(LogTest.class); @Test void testLogOutput() { logger.info("测试信息日志"); logger.error("测试错误日志"); } } ``` 3. 检查日志文件内容是否符合预期格式[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值