前言
总结一下 Flink 项目代码打印日志的配置。
目的
默认情况下不会打印Flink日志信息,只会抛出缺少日志类警告,比如上篇文章中的 flink-hbase 代码就没有打印 Flink 日志信息。有些情况下我们需要从 Flink 日志中获取一下信息,对于我们学习 Flink 或者解决问题都有帮助。所以本文的目的就是总结如何配置项目将 Flink 日志打印出来。
官方文档
https://nightlies.apache.org/flink/flink-docs-master/zh/docs/deployment/advanced/logging/
代码
代码地址:https://github.com/dongkelun/flink-learning/tree/master/flink-log
依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${log4j12.version}</version>
</dependency>
只需要这一个依赖即可,缺少这个依赖会抛出警告:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

配置 log4j.properties
在resource文件下添加 log4j.properties
log4j.rootCategory=info, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1} %l: %m%n
缺少 log4j.properties 会抛出警告:
log4j:WARN No appenders could be found for logger (org.apache.calcite.sql2rel).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

可以根据需求单独设置 Flink 的日志级别:
log4j.logger.org.apache.flink=error
日志打印效果


ConversionPattern
日志输出格式,仅总结部分常用参数,便于知道如何打印自己想要获取的信息。
%d 输出日志事件的日期。日期转换说明符后面可以跟一组大括号,其中包含每个SimpleDateFormat的日期和时间模式字符串。
%p 日志级别,即 TRACE、DEBUG、INFO、WARN、ERROR 等
%c %c{1} 输出发布日志事件的记录器的名称。记录器转换说明符后面可以有精度说明符,精度说明符由十进制整数或以十进制整数开头的模式组成。这里的日志记录器为 Logger 即LoggerFactory.getLogger()参数里的类名,这里为com.dkl.flink.TestLog,参数也可以写别的类名,那么%c打印出来就是别的类了,所以%c打印的不一定是运行程序类名
%C %C{1} 输出发出日志记录请求的调用方的完全限定类名。此转换说明符后面可以可选地跟有精度说明符,该说明符遵循与记录器名称转换器相同的规则。调用 Logger 的类名,也就是运行程序的类名。
%l 输出生成日志事件的调用方的位置信息。调用logger的类的全名,包括类目名、发生的线程,以及在代码中的行数。
%L 输出发出日志记录请求的行号。代码行号
%m 输出与日志事件相关联的应用程序提供的消息。示例代码在这里的输出为:finished
%n 输出与平台相关的一个或多个行分隔符字符。换行符
%M 输出发出日志记录请求的方法名称。调用 Logger 方法名,这里为:main
%F 输出发出日志记录请求的文件名。源代码的文件名,这里为:TestLog.java
完整参数可查看官方文档:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
另外网上的博客总结也比较全面,放在这里供参考:
https://blog.csdn.net/baidu_37982584/article/details/82217661

日志级别
我们可以根据需要设置不同的日志级别,比如想学习调试Flink的源码,我们可以将其他模块如Hadoop代码的日志级别设置为较高的级别如 WARN、ERROR,将Flink的日志级别设置为较低的级别如 TRACE、DEBUG,这样便于我们定位问题原因或者学习对应的源码,当我们定位问题完成或者学习完成后再将日志级别设置为较高的 WARN、ERROR
相关阅读
🧐 分享、点赞、在看,给个3连击呗!👇




