暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Flink 日志总结

伦少的博客 2023-12-22
799

前言

总结一下 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".
SLF4JDefaulting to no-operation (NOPlogger implementation
SLF4JSee 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连击👇

文章转载自伦少的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论