[Talend] Log4j によるロギング

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

バッチ処理中のエラーログ出力は、後で原因を特定するために必要不可欠かと思います。

Talend ジョブの標準出力をファイルへリダイレクトする方法もありますが、今回は Log4J でのログ出力を考えてみました。

Logger

WS000000

tJava コンポーネントプロパティの「詳細設定」で Logger クラスをインポートします。

import org.apache.log4j.Logger;

WS000001

tJava コンポーネント内で Logger インスタンスを生成してログ出力します。

Logger logger = Logger.getLogger(getClass());
logger.warn("テストテスト");

WS000002

上図の通りコンソールへログ出力されました。

Log4J の設定はどこにあるかというと……

WS000003

(ファイルメニューから「プロジェクトプロパティの編集」を選択するかプロジェクト設定ボタンを押下します。)

WS000004

プロジェクトの設定にあります。

tLogCatcher

次は tLogCatcher コンポーネントを使って例外をロギングしてみます。

WS000005

tJava コンポーネントで例外を起こします。

double value = 1 / 0;

WS000011

tLogCatcher を設置したら tLogRow と メインフローで繋いで例外データがどのような形で流れてくるか確認します。

WS000006

java.lang.ArithmeticException は下表のようなデータとして流れてくる事がわかりました。

key value
moment 2015-08-31 15:47:42
pid 7GWW1i
root_pid 7GWW1i
father_pid 7GWW1i
project EXAMPLE
job loggng
context Default
priority 6
type Java Exception
origin tJava_1
message java.lang.ArithmeticException:/ by zero
code 1

WS000007

今度は tJavaRow コンポーネントで tLogCatcher からのフローを受けてロギングします。

tJavaRow も前段の tJava と同様に Logger をインポートします。

import org.apache.log4j.Logger;

WS000008

Logger インスタンスを生成してロギングします。ロギングするメッセージには、tLogCathcer から流れてきた message カラムの値を指定します。

Logger logger = Logger.getLogger(getClass());
logger.error(input_row.message);

WS000009

tLogRow を無効にして実行します。

WS000010

エラーメッセージがロギングされました。

まとめ

いくつかのコンポーネントは、コンポーネント単位でロギングするようになっているようですが、ジョブとしてのロギングは tJava や tJavaRow を用いてロギングする方策しかないかなと感じました。

今回は ConsoleAppender によるコンソールへの出力だけでしたが、次回は RolingFileAppender を適用してログローテーションさせてみたいと思います。