现在网上大部分的缓解措施大部分都是:
-
在jvm参数中添加 -Dlog4j2.FORMATMsgNoLookups=true
-
系统环境变量中将FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true
-
创建 "log4j2.component.properties" 文件,文件中增加配置 "log4j2.formatMsgNoLookups=true"
该缓解措施对于2.10以下的版本并没有效果,通过源码我们可以看到旧版本并不是从环境环境变量中获取noLookups的值,而是从判断属性中是否有nolookups,所以网上说的缓解措施并没有效果。
以下是NOLOOKUPS的常量值:
对于低版本如果才能设置nolookups的值呢?通过源码我们可以看到只要属性中有noloopups变量即可,所以我们可以通过设置pattern的消息的属性值nolookups,%m/msg/message{nolookups}。
测试结果:
结论: 修复时一定要注意自己log4j的版本,确定修复方案是否有效。