ログの使い方

Flinkでのログはslf4jログインタフェースを使って実装されています。背後ではログ フレームワーク、log4jが使われます。logback設定ファイルも提供し、それらをJVMにプロパティとして渡します。log4jの代わりにlobackを喜んで使うユーザは、またにlog4jを排除(あるいはそれをlib/フォルダから削除)することができます。

Log4jの設定

Log4j はプロパティファイルを使って制御されます。Flinkの場合は、ファイルは通常log4j.propertiesと呼ばれます。このファイルのファイル名と場所を-Dlog4j.configuration= パラメータを使ってJVMに渡します。

Flinkは以下のデフォルトのプロパティファイルを同梱しています:

  • log4j-cli.properties: Flinkコマンドライン クライアント (例えば flink run) (クラスタ上で実行されるコードではありません)によって使われます。
  • log4j-yarn-session.properties: YARNセッションを開始する時(yarn-session.sh)に、Flinkコマンドライン クライアントによって使われます。
  • log4j.properties: JobManager/Taskmanager のログ (スタンドアローンおよびYARNの両方)

logbackの設定

For users and developers alike it is important to control the logging framework. ログ フレームワークの設定は設定ファイルによって排他的に行われます。設定ファイルは、環境プロパティ-Dlogback.configurationFile=<file> あるいはクラスパス内にlogback.xmlを配置するかのどちらかで指定されなければなりません。The conf directory contains a logback.xml file which can be modified and is used if Flink is started outside of an IDE and with the provided starting scripts. 与えられるlogback.xml は以下の形式を持ちます:

<configuration>
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>${log.file}</file>
        <append>false</append>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{60} %X{sourceThread} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="file"/>
    </root>
</configuration>

org.apache.flink.runtime.jobgraph.JobGraphのログレベルを制御するために、例えば、設定ファイルに以下の行を追加する必要があるかも知れません。

<logger name="org.apache.flink.runtime.jobgraph.JobGraph" level="DEBUG"/>

logbackを設定するための更に詳しい情報はLOGbackのマニュアルを見てください。

開発者のためのベストプラクティス

slf4jを使うロガーは以下を呼び出すことで生成されます

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

Logger LOG = LoggerFactory.getLogger(Foobar.class)

slf4jから最も多くの恩恵を受けるためには、プレースフォルダの仕組みを使うことをお勧めします。プレースフォルダを使うことで、メッセージが記録されないように高くログレベルを設定した場合に不必要な文字列の構築を避けることができます。プレースフォルダの構文は以下の通りです:

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

プレースフォルダは記録されるべき期待値と結合して使うこともできます。

catch(Exception exception){
	LOG.error("An {} occurred.", "error", exception);
}
TOP
inserted by FC2 system