2

我看到对 System.err 的写入映射到 GCP 日志记录中的错误级别日志记录事件。有没有办法将这些映射到不同的日志记录级别,例如警告级别?

在我们的代码中,我们总是写入 SLF4J 记录器,但我们使用的是不幸写入 System.err 并引发异常的第三方库。由于我们有异常,我们不想将 System.err 记录为错误。

更新:看起来 Dataflow 曾经有一个 com.google.cloud.dataflow.sdk.runners.worker.logging.DataflowWorkerLoggingInitializer 类,它允许我按照我的意愿配置 stdout 和 stderr。有谁知道它为什么被删除?

我会使用命令行选项配置它:

--workerLogLevelOverrides={\"System.err":\"WARN\",\"System.out\":\"DEBUG\"} 

或以下代码:

    /**
 * Maps the "System.err" and "System.out" loggers to desired levels.
 * Note: the "System.err" and "System.out" logger are not currently part of the specification as of v1.5.1, 
 * so this is dependent on the current implementation of com.google.cloud.dataflow.sdk.runners.worker.logging.DataflowWorkerLoggingInitializer
 * which does configure those loggers.
 * @param options
 */
public static void setupSystemOutAndErrLogging(DataflowWorkerLoggingOptions options) {
    WorkerLogLevelOverrides overrides = options.getWorkerLogLevelOverrides();
    if ( overrides == null ) {
        overrides = new WorkerLogLevelOverrides();
    }
    options.setWorkerLogLevelOverrides(
            overrides.addOverrideForName("System.err", Level.WARN)
                    .addOverrideForName("System.out", Level.DEBUG));
}
4

3 回答 3

1

使用Beam SDK时,现在可以在 Google Dataflow 中使用此功能。请参阅提交 874e199DataflowWorkerLoggingOptions. 通过此更改,您可以在 System.out 和 System.err 日志记录方面获得一些额外的控制:

  • setWorkerSystemOutMessageLevel()通过和更改从 System.out / System.err 日志发出的日志消息的级别setWorkerSystemErrMessageLevel()
  • 通过更改全局日志级别过滤setDefaultWorkerLogLevel()。这以前可用,但现在适用于 System.out 和 System.err 日志消息。
  • setWorkerLogLevelOverrides()通过withSystem.outSystem.err记录器名称(如原始问题中所述)更改 System.out 和 System.err 的记录器级别覆盖。
于 2016-06-16T16:57:33.813 回答
1

数据流将标准输出重定向到一个java.util.logging.Logger命名System.out和标准错误到System.err. 您可以将 java util logging 配置为不在这些记录器上记录任何内容,这将禁用此功能。

最简单的方法是使用workerLogLevelOverrides管道选项。例如:--workerLogLevelOverrides={"System.out":"OFF", "System.err":"OFF"}

编辑 1:使用workerLogLevelOverrides选项而不是代码来配置记录器。

于 2016-04-27T20:50:13.830 回答
-1

Dataflow 目前没有公开控制标准错误日志级别的方法。但是,我认为可以哄 SLF4J 做你想做的事。看看Redirect System.out 和 System.err to slf4j

于 2016-04-26T23:41:43.120 回答