この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。DI部の大高です。
今回はTalendのコンポーネント「tLogCatcher」を利用したジョブの例外ハンドリングを紹介したいと思います。
前提条件
Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。
tLogCatcherについて
「tLogCatcher」を利用するとジョブの例外をハンドリングすることができます。
「tLogCatcher」コンポーネントのTalend Helpページはこちらです。
では、具体的に以下で解説していきます。
ジョブの説明
ジョブとしては「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」コンポーネントの紹介でした。
ジョブを実行する場合には予期しない例外発生は付き物なので、定期的にジョブを実行する場合は必須で利用するコンポーネントになるのではないでしょうか。
それでは!