flink 基于k8s log4j2 换成logback
flink k8s log4j2 logback 日志输出 日志转换
·
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>-->
更多推荐
已为社区贡献2条内容
所有评论(0)