You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:30:43