Log4j2.xml变量关联、Purge配置及内存泄漏问题解决咨询
问题分析与修复方案
原配置存在两个核心问题引发内存泄漏:
- Routes的pattern语法错误(多了一个闭合大括号),导致无法根据requestId正确区分日志实例
- RollingFile Appender未关联requestId变量,IdlePurgePolicy无法识别空闲的请求专属日志实例,大量无用Appender持续堆积占用内存
修改后的Log4j2配置
<Appenders> <Routing name="Routing"> <!-- 修正pattern语法错误,正确引用ThreadContext中的requestId变量 --> <Routes pattern="$${ctx:requestId}"> <!-- 为每个requestId创建唯一的日志实例,关联变量到Appender名称和文件路径 --> <Route> <RollingFile name="childallog-${ctx:requestId}" append="true" fileName="logs/childallog-${ctx:requestId}.log" filePattern="logs/childallog-${ctx:requestId}-%i.%d{yyyy-MM-dd}.log"> <PatternLayout pattern="%d{DEFAULT} %-5p [%c] - %m%n"/> <Policies> <OnStartupTriggeringPolicy minSize="1" /> <SizeBasedTriggeringPolicy size="100MB" /> </Policies> <DefaultRolloverStrategy max="3" fileIndex="min" /> </RollingFile> </Route> <!-- 处理无requestId的请求,路由到默认日志实例 --> <Route key="$${ctx:requestId}" ref="DefaultRollingFile"/> </Routes> <!-- 自动清理1分钟未使用的空闲日志实例 --> <IdlePurgePolicy timeToLive="1" timeUnit="minutes"/> </Routing> <!-- 默认日志Appender,兜底无requestId的请求日志 --> <RollingFile name="DefaultRollingFile" append="true" fileName="logs/childallog-default.log" filePattern="logs/childallog-default-%i.%d{yyyy-MM-dd}.log"> <PatternLayout pattern="%d{DEFAULT} %-5p [%c] - %m%n"/> <Policies> <OnStartupTriggeringPolicy minSize="1" /> <SizeBasedTriggeringPolicy size="100MB" /> </Policies> <DefaultRolloverStrategy max="3" fileIndex="min" /> </RollingFile> </Appenders> <Loggers> <Logger name="AssemblyLine.AssemblyLines/childAL" level="info"> <AppenderRef ref="Routing" /> </Logger> </Loggers>
关键修改说明
- 修正语法错误:将原错误的
$${ctx:requestId}}改为$${ctx:requestId},确保ThreadContext变量能被正确解析 - 绑定requestId到日志实例:给RollingFile的名称、日志文件名添加
-${ctx:requestId}后缀,让每个请求的日志实例拥有唯一标识,保证IdlePurgePolicy能精准识别并清理空闲实例 - 添加默认路由:避免无requestId的请求创建无效日志实例,统一路由到默认Appender
- IdlePurgePolicy生效:配置的1分钟存活时间会自动清理超过1分钟未被使用的请求专属日志Appender,从根源上避免内存堆积
代码层面配合要求
HTTP请求处理结束时,必须调用ThreadContext.remove("requestId")清除上下文变量,让IdlePurgePolicy能正确识别该请求对应的日志实例已进入空闲状态。
内容的提问来源于stack exchange,提问作者user3506319
相关产品推荐
相关产品推荐

