Flink 1.13.2版本如何从log4j(pre-Log4j2)升级为Log4j2
Flink 1.13.2 从Log4j 1.x升级到Log4j2实践指南
前置依赖调整
- 首先移除Flink发行包
lib目录下原有的Log4j 1.x相关依赖:log4j-1.2.x.jar、slf4j-log4j12-x.x.x.jar - 替换为Log4j2适配依赖,需要导入以下jar包到
lib目录:log4j-api-2.17.x.jar(推荐2.17.2及以上稳定版本,规避历史安全漏洞)log4j-core-2.17.x.jarlog4j-slf4j-impl-2.17.x.jar(适配slf4j接口,替换原有slf4j-log4j12包)log4j-1.2-api-2.17.x.jar(Log4j1兼容层,原有代码直接调用Log4j 1.x API的逻辑无需修改即可运行)
注意:Flink 1.13本身已原生兼容Log4j2,无需修改框架源码,仅替换依赖即可。如果是作业内部打包携带了日志依赖,需要在pom.xml中将原有log4j 1.x相关依赖设置为
<scope>provided</scope>,避免依赖冲突。
配置文件迁移
- 原有
log4j.properties配置需要替换为Log4j2的配置文件,官方推荐使用log4j2.xml,放在Flink的conf目录下即可,优先级高于其他配置格式。 - 常用配置对应关系:
- 日志级别配置:原有
log4j.rootLogger=INFO,file改为<Root level="INFO"><AppenderRef ref="file"/></Root> - 滚动文件Appender配置:原有DailyRollingFileAppender对应Log4j2的
RollingFile加上TimeBasedTriggeringPolicy即可实现按天滚动,也支持按大小滚动的组合策略。
- 日志级别配置:原有
- 如果不想重写配置,也可以用兼容转换工具直接将
log4j.properties转换为log4j2.xml格式,转换后简单调整参数即可生效。
作业适配验证
- 依赖和配置调整完成后,先启动本地单机Flink集群,运行测试作业,查看
logs目录下是否正常生成日志文件,日志内容格式、滚动策略是否符合预期。 - 重点检查原有自定义日志埋点的输出是否正常,无遗漏或格式错误。
- 若是On YARN部署模式,需要将替换完依赖的Flink打包上传到YARN的分布式缓存,或者在作业提交参数中指定
-yt参数上传lib目录下的新日志依赖,避免节点上原有旧依赖冲突。
常见问题排查
- 如果启动时报
ClassNotFoundException: org.apache.log4j.Logger,检查是否漏装了log4j-1.2-api兼容包。 - 如果日志不输出,优先检查classpath下是否同时存在log4j 1.x和log4j2的依赖,出现冲突时可以在启动参数中加上
-Dorg.apache.logging.log4j.debug=true查看日志初始化过程,定位冲突源。 - 如果作业内部有自定义日志配置文件,需要确保配置文件命名为
log4j2.xml,且放在作业jar包的根目录下,优先级高于集群全局配置。
内容的提问来源于stack exchange,提问作者user2456976
相关产品推荐
相关产品推荐

