如何在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
相关产品推荐
相关产品推荐

