[Talend]tLogCatcherを利用してジョブの例外をハンドリングする

はじめに

こんにちは。DI部の大高です。

今回はTalendのコンポーネント「tLogCatcher」を利用したジョブの例外ハンドリングを紹介したいと思います。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。

tLogCatcherについて

「tLogCatcher」を利用するとジョブの例外をハンドリングすることができます。

「tLogCatcher」コンポーネントのTalend Helpページはこちらです。

tLogCatcher

では、具体的に以下で解説していきます。

ジョブの説明

ジョブとしては「tJava」で意図的に例外を発生させて「tLogCatcher」で例外ハンドリングをし、「tLogRow」で結果をエラー内容を出力しています。

「tJava」コンポーネントの設定

「tJava」コンポーネントでは、globalMapから存在しないキーの値(Null)を取得して.toString()することで、意図的にNullPointerExceptionを発生させるようにしています。

globalMap.get("foo").toString();

「tLogCatcher」コンポーネントの設定

「tLogCatcher」は以下のように設定しました。

スキーマ定義

スキーマ定義は固定スキーマとなっており変更できません。

各カラムの内容は以下の通りとなります。

カラム 内容
moment メッセージの受信日時 2019-01-11 09:48:22
pid ジョブのプロセスID kld5hI
root_pid ルートプロセスID kld5hI
father_pid 親プロセスID kld5hI
project プロジェクト名 SANDBOX
job ジョブ名 tLogCatcher
context ジョブ起動コンテキスト Default
priority メッセージの優先レベル 6
type メッセージタイプ Java Exception
origin メッセージ発生元コンポーネント名 tJava_1
message メッセージ内容 java.lang.NullPointerException:null
code エラーコードレベル 1

Java例外のキャッチ

ジョブ内で発生した「Java例外」をキャッチするか否かのオプションです。

tDieのキャッチ

「tDie」コンポーネントが呼び出されたときにキャッチするか否かのオプションです。

tWarnのキャッチ

「tWarn」コンポーネントが呼び出されたときにキャッチするか否かのオプションです。

「tLogRow」コンポーネントの設定

「tLogRow」コンポーネントでは、結果が見やすいように「モード」を「縦に表示」に設定しました。

実行結果

設定は以上です。実際にこのジョブを実行すると以下のように出力されます。

[statistics] connecting to socket on port 3401
[statistics] connected
Exception in component tJava_1 (tLogCatcher)
java.lang.NullPointerException
	at sandbox.tlogcatcher_0_1.tLogCatcher.tJava_1Process(tLogCatcher.java:377)
	at sandbox.tlogcatcher_0_1.tLogCatcher.runJobInTOS(tLogCatcher.java:1656)
	at sandbox.tlogcatcher_0_1.tLogCatcher.main(tLogCatcher.java:1505)
.--------------------------------------------------.
|                  #1. tLogRow_1                   |
+------------+-------------------------------------+
| key        | value                               |
+------------+-------------------------------------+
| moment     | 2019-01-11 09:48:22                 |
| pid        | kld5hI                              |
| root_pid   | kld5hI                              |
| father_pid | kld5hI                              |
| project    | SANDBOX                             |
| job        | tLogCatcher                         |
| context    | Default                             |
| priority   | 6                                   |
| type       | Java Exception                      |
| origin     | tJava_1                             |
| message    | java.lang.NullPointerException:null |
| code       | 1                                   |
+------------+-------------------------------------+

[statistics] disconnected

発生した例外が標準出力に表示(上記でハイライトしている箇所)されており、その後にtLogRowによりエラー内容が表示されています。

まとめ

以上、「tLogCatcher」コンポーネントの紹介でした。

ジョブを実行する場合には予期しない例外発生は付き物なので、定期的にジョブを実行する場合は必須で利用するコンポーネントになるのではないでしょうか。

それでは!