Log4j按小时分目录+跨目录连续索引及全局滚动配置问询
Log4j 2 配置方案
核心配置思路
- 全局索引延续:用Log4j 2内置的
${counter:}占位符实现跨目录的递增索引,替代默认的目录内重置的%i。 - 全局滚动清理:通过
DefaultRolloverStrategy的delete规则,结合路径排序器遍历所有小时目录,按文件时间从旧到新排序,删除超出数量上限的日志文件。
完整log4j2.xml示例
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Properties> <Property name="logDir">./logs</Property> <Property name="logAppName">MyApp</Property> <Property name="logSessionData">session123</Property> <!-- 全局计数器初始值,需延续历史索引时手动指定最后一个索引值 --> <Property name="logCounterStart">0</Property> </Properties> <Appenders> <RollingRandomAccessFile name="RollingFile" append="true" filename="${logDir}/${logAppName}_${logSessionData}_LAST.logmx" <!-- 全局计数器替代%i,确保跨目录索引不重置 --> filePattern="${logDir}/$${date:yyyy-MM-dd-HH}/${logAppName}_${logSessionData}_#${counter:LOG_INDEX:-${logCounterStart}}.logmx"> <!-- 日志格式定义 --> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> <!-- 滚动触发策略:按小时+文件大小双触发 --> <Policies> <!-- 每小时自动创建对应目录并触发滚动 --> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 文件达到100MB时触发滚动 --> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <!-- 全局滚动清理规则 --> <DefaultRolloverStrategy max="10000"> <Delete basePath="${logDir}" maxDepth="2"> <!-- 匹配所有小时目录下的滚动日志文件 --> <IfFileName glob="*/*_#*.logmx"/> <!-- 按文件修改时间升序排序(旧文件在前) --> <PathSorter comparator="lastModified" order="ascending"/> <!-- 保留最近10000个文件,删除超出部分 --> <IfAccumulatedFileCount exceeds="10000"/> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="RollingFile"/> </Root> </Loggers> </Configuration>
关键配置说明
1. 全局索引延续实现
LOG_INDEX是全局计数器的唯一标识,所有滚动操作共享该计数器,确保新目录下的日志索引直接延续上一目录的最后索引,不会重置。- 若需要从历史索引继续计数,修改
logCounterStart属性为上次最后一个日志文件的索引值即可。
2. 全局滚动清理实现
maxDepth="2":遍历根日志目录下的二级目录(即各小时目录),确保所有历史日志都被纳入清理范围。PathSorter按文件修改时间升序排序,保证删除的是最旧的日志文件,而非仅当前目录内的旧文件。IfAccumulatedFileCount控制全局保留的日志总数,超出上限时自动清理旧文件。
注意事项
- 需使用Log4j 2.10.0及以上版本,确保
${counter:}占位符和PathSorter功能正常工作。 - 若需按文件创建时间排序,将
comparator值改为creationTime即可。
内容的提问来源于stack exchange,提问作者אחת111
相关产品推荐
相关产品推荐

