前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
总结一下 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
依赖
1 | <dependency> |
只需要这一个依赖即可,缺少这个依赖会抛出警告:1
2
3SLF4J: 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.properties1
2
3
4
5log4j.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 会抛出警告:1
2
3log4j: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 的日志级别:1
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