Spring Boot应用如何设置日志文件格式为server.log.2017-12-22.gz?
Spring Boot 配置日志按日期压缩归档
嘿,这个需求单纯靠application.properties里的基础日志参数配置是实现不了的,得借助Spring Boot默认集成的Logback的滚动归档策略来搞定。下面是具体的实现步骤:
1. 新增Logback配置文件
在你的项目src/main/resources目录下创建一个名为logback-spring.xml的配置文件(用这个文件名可以更好地和Spring Boot的环境配置结合)。
2. 配置滚动归档规则
把下面的配置内容复制到logback-spring.xml里,我已经帮你做好了按日归档并压缩的设置:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志格式,和你原来的pattern一致 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd } [%thread] %-5level %logger{36} - %msg%n"/> <!-- 日志存储目录 --> <property name="LOG_DIR" value="/var/opt/VS_Logs"/> <!-- 控制台输出appender --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 滚动文件输出appender,实现按日归档压缩 --> <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当前日志文件 --> <file>${LOG_DIR}/server.log</file> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> <!-- 滚动策略:按时间滚动,每天生成一个归档文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档文件的路径和格式,这里就会生成server.log.2017-12-22.gz这样的文件 --> <fileNamePattern>${LOG_DIR}/server.log.%d{yyyy-MM-dd}.gz</fileNamePattern> <!-- 可选:保留归档日志的天数,比如保留30天 --> <maxHistory>30</maxHistory> <!-- 可选:限制归档日志总大小,比如最多10GB --> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> </appender> <!-- 根日志配置,指定输出级别和使用的appender --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="ROLLING_FILE"/> </root> </configuration>
3. 移除原application.properties中的日志配置
把你原来在application.properties里的这两行删掉,避免和Logback配置冲突:
logging.pattern.file= "%d{yyyy-MM-dd } [%thread] %-5level %logger{36} - %msg%n" logging.file=/var/opt/VS_Logs/server.log
效果验证
启动你的Spring Boot应用后,当天的日志会正常写入/var/opt/VS_Logs/server.log,到了第二天(或者手动触发滚动的话),前一天的日志文件会被自动压缩成server.log.xxxx-xx-xx.gz的格式,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Deepesh Rathore




