如何在Quarkus中按时间(每日或指定时段)配置日志轮转?
Quarkus 配置按时间轮转日志
Quarkus的日志系统基于JBoss LogManager,默认支持时间轮转配置,也可以切换到Logback获得更灵活的控制,以下是两种实现方式:
方式一:使用默认的JBoss LogManager
每日自动轮转(零点切分)
在application.properties中添加以下配置:
# 指定日志文件路径 quarkus.log.file.path=./logs/app.log # 单日志文件最大大小(可选,避免单个文件过大) quarkus.log.file.rotation.max-file-size=100M # 轮转后的日志文件名后缀(日期格式) quarkus.log.file.rotation.file-suffix=.yyyy-MM-dd # 启动时检查是否需要轮转(可选) quarkus.log.file.rotation.rotate-on-boot=true # 开启定时轮转(核心配置,启用时间触发的轮转) quarkus.log.file.rotation.scheduled=true
配置后,系统会在每日零点自动将当前日志文件重命名为app.log.yyyy-MM-dd,并生成新的app.log继续写入。
指定时间点轮转(如每日凌晨2点)
如果需要自定义轮转时间,创建src/main/resources/jboss-logmanager.properties文件,直接配置底层的PeriodicRotatingFileHandler:
# 定义文件处理器 handler.FILE=org.jboss.logmanager.handlers.PeriodicRotatingFileHandler handler.FILE.level=INFO handler.FILE.properties=autoFlush,fileName,suffix,period handler.FILE.autoFlush=true handler.FILE.fileName=./logs/app.log # 日志文件名后缀 handler.FILE.suffix=.yyyy-MM-dd # 指定轮转时间(格式为HH:mm,这里设置为凌晨2点) handler.FILE.period=02:00 # 配置日志格式 handler.FILE.formatter=PATTERN formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter formatter.PATTERN.properties=pattern formatter.PATTERN.pattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n # 将文件处理器添加到根日志记录器 rootLogger.handlers=CONSOLE,FILE
方式二:使用Logback(更灵活的配置)
如果需要更丰富的轮转策略(比如同时按时间和大小轮转、自定义保留周期),可以切换到Logback:
1. 添加Logback依赖
在pom.xml中引入Quarkus Logback扩展:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-logging-logback</artifactId> </dependency>
2. 配置Logback轮转规则
创建src/main/resources/logback.xml文件,配置时间轮转策略:
<configuration> <!-- 控制台输出(可选) --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件轮转输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs/app.log</file> <!-- 基于时间的轮转策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 轮转后的文件名格式 --> <fileNamePattern>./logs/app.log.%d{yyyy-MM-dd}</fileNamePattern> <!-- 自定义轮转时间(比如凌晨2点),结合大小限制 --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 单文件最大大小 --> <maxFileSize>100MB</maxFileSize> <!-- 指定每日轮转的起始时间 --> <startTime>02:00:00</startTime> </timeBasedFileNamingAndTriggeringPolicy> <!-- 保留日志的最大天数 --> <maxHistory>30</maxHistory> <!-- 日志文件总大小上限 --> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 根日志级别及输出目标 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration>
该配置会在每日凌晨2点触发轮转,同时如果单个文件达到100MB也会提前轮转,还能自动清理30天前的日志。
内容的提问来源于stack exchange,提问作者Sandeep Sharma
相关产品推荐
相关产品推荐

