当前位置:   article > 正文

Flink|《Flink 官方文档 - 部署 - 日志》学习笔记

flink 官方

学习文档:《Flink 官方文档 - 部署 - 日志》

学习笔记如下:


所有 Flink 进程都会创建一个文本格式的日志文件,其中包含该进程中发生的各种事件的信息。

这些日志提供了深入了解 Flink 内部工作的途径,同时可以用来输出检测出的问题(以 WARN / ERROR 信息的形式),还可以辅助调试问题。

日志文件可以通过 JobManager / TaskManager 对应的 WebUI 页面访问。所使用的 Resource Provider 可能会提供额外的访问方式来访问日志。Flink 中的日志记录是使用 SLF4J 日志接口实现的。

配置 Log4j 2

Log4j 2 是通过 property 配置文件进行配置的。

Flink 发行版在 conf 目录中附带了以下 log4j 配置文件,如果启用了 Log4j 2,则会自动使用如下文件:

  • log4j-cli.properties:Flink 命令行使用(例如 flink run);
  • log4j-session.properties:Flink 命令行在启动基于 Kubernetes/Yarn 的 Session 集群时使用(例如 kubernetes-session.sh/yarn-session.sh);
  • log4j-console.properties:Job-/TaskManagers 在前台模式运行时使用(例如 Kubernetes);
  • log4j.properties: Job-/TaskManagers 默认使用的日志配置。

Log4j 会定期扫描这些文件的变更,并在必要时调整日志记录行为。默认情况下30秒检查一次,监测间隔可以通过 Log4j 配置文件的 monitorInterval 配置项进行设置。

配置 Log4j 1

Flink 附带了 Log4j API bridge 相关的依赖,使当前基于 Log4j 1 开发的应用程序可以继续正常运行。要配置 Flink 与 Log4j 1 一起使用,则需要在 pom 文件中进行如下替换:

  • lib 目录中移除 log4j-corelog4j-slf4j-impllog4j-1.2-api 的 jars 包;
  • lib 目录中添加 log4jslf4j-log4j12log4j-to-slf4j 的 jars 包;
  • 用适配的 Log4j1 版本替换 conf 目录中的所有 log4j 配置文件

配置 logback

要配置 Flink 与 logback 一起使用,则需要再 pom 文件中进行如下替换:

  • lib 目录中移除 log4j-slf4j-impl 的 jars 包;
  • lib 目录中添加 logback-corelogback-classic 的 jars 包。

Flink 发行版在 conf 目录中附带了以下 logback 配置文件,如果启用了 logback,则会自动使用这些文件:

  • logback-session.properties:Flink 命令行在启动基于 Kubernetes/Yarn 的 Session 集群时使用;
  • logback-console.properties:Job-/TaskManagers 在前台模式运行时使用;
  • logback.xml: 命令行和 Job-/TaskManager 默认使用的日志配置。

最佳实践

通过将相应的 Class 的类型对象作为参数调用 org.slf4j.LoggerFactory#LoggerFactory.getLogger 方法,可以创建一个 SLF4J 的 logger 实例。建议将 logger 字段设置为 private static final 修饰的类型。

示例:实例化 SLF4J 的 logger 对象,并在运行中打印日志

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Foobar {
	private static final Logger LOG = LoggerFactory.getLogger(Foobar.class);

	public static void main(String[] args) {
		LOG.info("Hello world!");
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

为了最大限度地利用 SLF4J,建议使用其占位符机制。使用占位符,可以保证在该日志消息不回被保留时,避免不必要的字符串构造。

占位符的语法如下:

LOG.info("This message contains {} placeholders. {}", 2, "Yippie");
  • 1

占位符也可以和要记录的异常一起使用:

catch(Exception exception){
	LOG.error("An {} occurred.", "error", exception);
}
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/1019099
推荐阅读
相关标签
  

闽ICP备14008679号