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 で利用できるようになりました。コミット 874e199およびを参照してくださいDataflowWorkerLoggingOptions。この変更により、System.out および System.err ロギングに関して、いくつかの追加制御が可能になります。

  • setWorkerSystemOutMessageLevel()およびを使用して、System.out / System.err ログから出力されるログ メッセージのレベルを変更しますsetWorkerSystemErrMessageLevel()
  • 経由でグローバル ログ レベル フィルタリングを変更しますsetDefaultWorkerLogLevel()。これは以前は利用可能でしたが、現在は System.out および System.err ログ メッセージに適用されます。
  • setWorkerLogLevelOverrides()withSystem.outおよびlogger 名を使用して、System.out および System.err のロガー レベルのオーバーライドを変更しますSystem.err(元の質問で説明されているように)。
于 2016-06-16T16:57:33.813 に答える
1

Dataflow は stdout をjava.util.logging.LoggernamedにリダイレクトしSystem.out、stderr を にリダイレクトしSystem.errます。これらのロガーに何も記録しないように Java util ロギングを構成すると、これが無効になります。

これを行う最も簡単な方法は、workerLogLevelOverridesパイプライン オプションを使用することです。例: --workerLogLevelOverrides={"System.out":"OFF", "System.err":"OFF"}.

編集 1:workerLogLevelOverridesコードではなくオプションを使用して、ロガーを構成します。

于 2016-04-27T20:50:13.830 に答える