log4j1.1.x 按天+按大小复合滚动及日志备份的xml配置方法
Log4j 1.1.x 配置调整方案
当前配置仅启用了基础按天滚动逻辑,未关联大小触发、自动压缩、保留周期的参数定义,通过修改滚动策略的参数配置,可在不替换原有appender的前提下覆盖全部需求,配置完全适配Windows系统的文件路径规则。
核心配置调整点
- 为TimeBasedRollingPolicy补充滚动文件命名规则,实现跨日自动滚动、滚动文件自动压缩能力
- 嵌套配置大小触发策略,满足单文件100MB的容量阈值滚动要求
- 增加滚动文件保留周期参数,实现压缩日志仅保留7天的自动清理逻辑
- 保留原有日志格式定义、INFO级别的全局日志配置
调整后完整配置文件
<?xml version="1.0"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="RollingAppender" class="org.apache.log4j.rolling.RollingFileAppender"> <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <!-- 写入中的活跃日志文件路径 --> <param name="ActiveFileName" value="logs/app.log"/> <!-- 滚动文件命名模板:按日期+当日文件序号命名,后缀.gz触发自动压缩 --> <param name="FileNamePattern" value="logs/app.%d{yyyy-MM-dd}.%i.log.gz"/> <!-- 滚动归档文件最长保留天数,超期自动删除 --> <param name="MaxHistory" value="7"/> <!-- 嵌套触发规则:当前写入文件达到100MB时立刻触发滚动 --> <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> <param name="MaxFileSize" value="100MB"/> </triggeringPolicy> </rollingPolicy> <layout class="org.apache.log4j.EnhancedPatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n" /> </layout> </appender> <root> <priority value="INFO" /> <appender-ref ref="RollingAppender" /> </root> </log4j:configuration>
各需求匹配校验
- 每日滚动触发:FileNamePattern中的
%d{yyyy-MM-dd}占位符会自动识别自然日边界,跨日时触发滚动,满足每日滚动要求 - 100MB容量阈值触发:嵌套的SizeBasedTriggeringPolicy会实时监控当前写入的活跃日志文件大小,达到100MB时立刻触发滚动,同日内拆分的多个文件通过
%i序号区分,不会出现文件名冲突 - 滚动日志自动压缩:FileNamePattern后缀指定为
.gz,所有非活跃的滚动日志会自动通过Gzip算法压缩,Windows环境下该逻辑为组件原生支持,无需依赖外部工具 - 7天保留周期:
MaxHistory=7参数会按天维度清理超过7个归档周期的压缩日志,无需手动处理磁盘文件 - 指定格式写入:完全保留原有EnhancedPatternLayout的转换规则,日志输出格式和原有定义一致
- INFO级别设置:保留root节点的
priority=INFO配置,低于INFO级别的DEBUG、TRACE日志不会被写入
注意:配置中使用的
org.apache.log4j.rolling包属于Log4j 1.x的扩展组件,需确保项目依赖中引入对应版本的apache-log4j-extras包,否则会出现类加载异常。
内容的提问来源于stack exchange,提问作者Jürgen
相关产品推荐
相关产品推荐

