禁用 Apache Flink 日志记录

Disable Apache Flink Logging

我使用的是旧版本的 Apache Flink,Runtime 2.11 和 Flink Core 1.1.2。由于与其他库的兼容性问题,我无法将其升级到更新的 Apache Flink。我正在尝试禁用节点在运行时的日志记录,以最大程度地减少执行时间。我尝试使用以下代码,但消息仍然显示:

Log4jLoggerAdapter logger = (Log4jLoggerAdapter)LoggerFactory
  .getLogger(JobManager.class);
Field loggerField = Log4jLoggerAdapter.class.getDeclaredField("logger");
loggerField.setAccessible(true);
Logger loggerObject = (Logger)loggerField.get(logger);


Field repoField = Category.class.getDeclaredField("repository");
repoField.setAccessible(true);
LoggerRepository repoObject = (LoggerRepository)repoField.get(loggerObject);

repoObject.setThreshold(Level.OFF);

另外,我想知道是否有一种方法可以估算执行计划每个阶段内交换的消息数量。

你能在 Main 函数中试试这个吗:

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

我对你的版本有疑问,但试一试。

public static ExecutionEnvironment setupLocalEnvironment() {
     Configuration conf = new Configuration();
      env = new LocalEnvironment(conf);
      env.getConfig().disableSysoutLogging();
      return env;
}

首先你要弄清楚你使用的是slf4j+logback,还是slf4j+log4j。 如果您使用 slf4j + log4j,则通过

禁用 log4j
log4j.rootLogger=OFF

否则你使用 slf4j + logback,然后通过

禁用 logback
<!-- This affects logging for both user code and Flink -->
<root level="OFF">
    <appender-ref ref="file"/>
</root>