将 Flink 1.10 升级到 Flink 1.11(Kubernetes 部署上的 Log4j)

Upgrade Flink 1.10 to Flink 1.11 (Log4j on kubernetes deployment)

Flink 1.10升级到Flink 1.11后,log4j配置失效

我之前的配置使用的库带有需要 log4j 的适配器1.x,并且不再与 Flink 1.11 兼容

根据新的配置,flink-conf.yaml应该是这样的

log4j-console.properties: |+
    # This affects logging for both user code and Flink
    rootLogger.level = INFO
    rootLogger.appenderRef.console.ref = ConsoleAppender
    rootLogger.appenderRef.rolling.ref = RollingFileAppender

    # Uncomment this if you want to _only_ change Flink's logging
    #logger.flink.name = org.apache.flink
    #logger.flink.level = INFO

我当前使用 log4j1 的配置与此类似

log4j-console.properties: |+
         log4j.rootLogger=INFO,myappender,console
         log4j.appender.myappender=com.company.log4j.MyAppender
         log4j.appender.myappender.endpoints=http://

有没有办法告诉 Flink 1.11 在 flink-conf.yaml 文件中使用 log4j1?

据我所知,flink-conf.yaml 不包含 log4j-console.properties 部分,这是一个单独的文件。我想你指定的是 flink-configuration-configmap.yaml 集群资源定义的一部分。

根据flink Configuring Log4j1 Section,为了使用log4j1,你需要:

  • 从 lib 目录中删除 log4j-corelog4j-slf4j-impllog4j-1.2-api jar,
  • log4jslf4j-log4j12log4j-to-slf4j jar 添加到 lib 目录,

将 Flink-1.10.2 升级到 Flink-1.11.3 后,我在 KubernetesDCOS(Mesos) Flink 集群中遇到了同样的问题。然后为了交叉验证,我在本地下载了 Flink 的二进制文件 flink-1.11.3-bin-scala_2.12.tgz 并测试了记录器,发现它可以正常工作。

Flink 1.11 从 Log4j1 切换到 Log4j2

  • 然后我按照Flink's official documents中提到的步骤将Flink与Log4j1一起使用

    1. Flink's lib 目录中删除 log4j-corelog4j-slf4j-impllog4j-1.2-api jar。
    2. log4jslf4j-log4j12log4j-to-slf4j jar 添加到 Flink's lib 目录。
  • 重新启动 KubernetesDCOS(Mesos) Flink 集群并验证记录器并发现它正在工作。