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

如何在Log4j2 properties配置中设置日志滚动时间阈值并验证功能

Log4j2 滚动策略调整方案

需求1:配置30秒时间滚动阈值+2轮循环测试

配置文件调整说明

  • 首先调整filePattern的时间精度到秒,TimeBasedTriggeringPolicy的滚动间隔是以filePattern中最小的时间单位为基准的,要实现秒级滚动必须把时间格式的最小单位设为秒
  • 修改TimeBasedTriggeringPolicy的interval参数为30,对应每30秒触发一次滚动
  • 注释掉大小触发策略,避免尺寸滚动干扰时间滚动的测试效果

调整后的完整配置如下:

status=all
name=PropertiesConfig
#Make sure to change log file path as per your need
property.filename=C:\\logs\\sms.log
filters=threshold
filter.threshold.type=ThresholdFilter
filter.threshold.level=all
appenders=rolling
appender.rolling.type=RollingFile
appender.rolling.name=RollingFile
appender.rolling.fileName=${filename}
# 调整filePattern时间精度到秒,用于支持秒级滚动
appender.rolling.filePattern=C:\\logs\\sms-%d{MM-dd-yyyy-HH-mm-ss}-%i.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# 最小时间单位为秒,interval=30即每30秒滚动一次
appender.rolling.policies.time.interval=30
appender.rolling.policies.time.modulate=true
# 注释掉大小触发策略,避免干扰时间滚动测试
# appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
# appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.rolling.strategy.max=20
loggers=rolling
logger.rolling.name=com.company.Main
logger.rolling.level=all
logger.rolling.additivity=true
logger.rolling.appenderRef.rolling.ref=RollingFile

测试代码调整

调整为2轮循环,每轮持续打印30秒日志,总运行时长60秒,可验证2次滚动效果:

String s1 = "test";
String s2 = "test";
// 外层循环跑2轮,对应2个30秒周期
for (int round = 0; round < 2; round++) {
    long start = System.currentTimeMillis();
    long end = start + 30 * 1000;
    while (System.currentTimeMillis() < end) {
        LOG.info(s1);
        LOG.info(s2);
    }
}

验证效果

程序运行结束后,C:\\logs目录会生成3个文件:当前正在写的sms.log,以及2个带时间戳的历史日志文件,分别对应前两个30秒周期的日志。

需求2:配置1天时间滚动阈值

配置文件调整说明

要实现跨天自动滚动,用默认的TimeBasedTriggeringPolicy即可,modulate=true参数会自动对齐自然天的边界,每天零点触发滚动,而不是按程序启动时间计算24小时周期。

调整后的完整配置如下:

status=all
name=PropertiesConfig
#Make sure to change log file path as per your need
property.filename=C:\\logs\\sms.log
filters=threshold
filter.threshold.type=ThresholdFilter
filter.threshold.level=all
appenders=rolling
appender.rolling.type=RollingFile
appender.rolling.name=RollingFile
appender.rolling.fileName=${filename}
# 时间精度到天即可
appender.rolling.filePattern=C:\\logs\\sms-%d{MM-dd-yyyy}-%i.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# 最小时间单位为天,interval=1即每1天滚动一次
appender.rolling.policies.time.interval=1
# 开启对齐时间边界,每天零点自动滚动
appender.rolling.policies.time.modulate=true
# 可保留原有大小触发策略,实现时间+大小双重滚动
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.rolling.strategy.max=20
loggers=rolling
logger.rolling.name=com.company.Main
logger.rolling.level=all
logger.rolling.additivity=true
logger.rolling.appenderRef.rolling.ref=RollingFile

验证方式

如果不想等待自然天验证,可以临时调整系统时间到当日23:59分,启动程序持续打印日志,到零点时就会自动生成带新日期的日志文件,后续日志会写入新文件中。

内容的提问来源于stack exchange,提问作者iwritecomeinmymind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:06:05