flink版本

基于flink镜像: flink:1.12.2-scala_2.12-java8

步骤

1. 将flink镜像中的log4j2依赖包替换成logback,并重新生成镜像

  • 本地目录结构
    ./lib
    |–logback-classic-1.2.3.jar
    |–logback-core-1.2.3.jar
    ./conf
    |–logback-console.xml

  • 构建flink镜像,将自带log4f2依赖替换成logback,并加入logback配置文件

FROM flink:1.12.2-scala_2.12-java8

RUN rm -r /opt/flink/lib/log4j*
ADD ./lib /opt/flink/lib
ADD ./conf /opt/flink/ext-conf

RUN rm -f /etc/localtime \
    && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone; \
    chown -R flink:flink /opt/flink/lib; \
    chown -R flink:flink /opt/flink/ext-conf; \

2. elasticSearch connector 日志系统转换为logback

elasticSearch connector直接引用log4j的api,因此不能通过直接替换jar包的方式处理。此时我们就需要引入转换器,将log4j2api转换为slf4j的标准api,从而达到兼容logback的目的。
  • 解决方案

使用org.apache.logging.log4j:log4j-to-slf4j装换,将log4j api转换为slf4j。
其中org.apache.logging.log4j:log4j-to-slf4j 允许将编码到Log4j2 API的应用程序路由到SLF4J。使用这个适配器可能会导致一些性能损失,因为在将Log4j2消息传递给SLF4J之前,必须对它们进行格式化。如果使用Log4j2作为实现,通常只有在过滤器或附加器访问它们时才会格式化它们。

 <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-to-slf4j</artifactId>
      <version>2.11.2</version>
      <scope>compile</scope>
    </dependency>
    
    <!-- <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.7.25</version>
      <scope>compile</scope>
    </dependency>-->
    
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐