IBM i Services Directory : QSYS2.Joblog_Info()表関数 

[(QA) Db2 for i にACSからSQL実行した際のエラーを調べたい](https://qiita.com/gomAnomalocaris/items/e799cc9aa89d1dcdca4b)でご紹介したように、ジョブ実行結果、エラーが発生した際にログを確認する際利用できます。
（当然ですが、）ジョブログはSQL以外であってもそのジョブのロギングレベル等に応じて出力されますのでこのIBM i サービスで検索可能です。

## 概要
■表関数名：QSYS2. Joblog_Info
■カテゴリ：メッセージ処理サービス
■サポート：IBM i 7.2 SF99702 Level 3以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-joblog-info-table-function

## 使用例1 : ODBC, JDBCのログ確認

IBM i にODBC, JDBC等で接続したジョブのログを検索する例
```
SELECT * FROM TABLE(QSYS2.JOBLOG_INFO('328898/QUSER/QZDASOINIT'));
```

**[QZDASOINITの簡単な説明はこちら。](https://qiita.com/gomAnomalocaris/items/13d5f4e1cc32393626d2)**
ODBC, JDBCジョブを接続した際にIBM i で起動する（処理実行する）ジョブになります。

### ジョブ名の調べ方

色々ありますが5250ならWRKACTJOBコマンド、Navigator for iなら実行管理機能　→　アクティブジョブなどがあります。QZDASOINITはIBM i OSが起動するサーバー・ジョブに該当するので、Navigator for i ではサーバー・ジョブ　から検索したほうが早いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ae14bf30-6881-745f-4ec6-fc2d564ba373.png)

上記サーバージョブ画面でジョブ名のフィルターに QZDASOINIT を指定するとODBC, JDBCのサーバージョブの一覧を取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6c9fe15f-f190-cc83-ed0f-07a64f6bd755.png)

上図からは、
・このIBM i ではサーバー・ジョブが107個実行中、うちQZDASOINITのジョブ数＝7個です。
・この7という値がODBC,JDBCの接続数になります。
・7は必ずしも接続ユーザー数とイコールではないかもしれません、アプリケーションのコーディングによっては１ユーザーが複数セッションを接続しているかもしれません。
・ですが、一般には接続ユーザー数とほぼ一緒と考えていいのではと思います。


上記で調べたジョブ名、現行ユーザー、番号を控えます・・
・・と見たら、ジョブ番号が表示されていないので、下記画像の右上 ：　をクリックして表示カラムを追加します。数値　というのがジョブ番号です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/8d8b8165-10e7-96fe-a51f-da992ab094e7.png)

下記のようにジョブ番号も表示されました。3行目の 673226 を調べることにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/8850c5bf-1207-8f6b-f2fb-ca0d35ccdd63.png)

**ここでもう一つ注意点があります。ユーザー名が実は2つあります。***ユーザー名***　と　***現行ユーザー名*** です。**

下記ではカラムの表示順を変えてあります。Joblog_Info()はじめジョブ名を指定する場合は通常、ユーザー名の方を指定します。今回の例ではQUSERになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/3e131dc4-67fb-2d4a-70c7-0cdb166e18ab.png)

## 実行例
```
SELECT * FROM TABLE(QSYS2.JOBLOG_INFO('673226/QUSER/QZDASOINIT'));
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/530a4645-f7d8-8cda-4459-5cef214bd33c.png)

このようにジョブログが検索できました。

ここから様々な条件でメッセージをフィルターして検索できます。

## 使用例2：5250ジョブ（QINTERサブシステム下のジョブ）のジョブログを検索する

下記のようにNavigator for i ではアクティブジョブの画面から、　サブシステム名 QINTERでフィルターします。（5250端末ID＝ジョブ名などでフィルターしてもいいです）

GOMADSP1 GOMA 674408 のジョブログを検索してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/815d7677-20c1-f191-7a21-21b0761c3a11.png)

※上記の画面サンプルでは表示カラム、表示順序をカスタマイズしています。

コマンドは・・
```
SELECT * FROM TABLE(QSYS2.JOBLOG_INFO('674408/GOMA/GOMADSP1'));
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/98312c59-9c5b-8f7c-d06d-8f8e74cd8f73.png)

上記で、SEVERITY 20以上は何らかのエラーメッセージですのでそれを確認することにします。
カラムが切れてしまっているので、実行SQLを修正します。
```
SELECT MESSAGE_ID, MESSAGE_TYPE, MESSAGE_SUBTYPE, SEVERITY, MESSAGE_TIMESTAMP, MESSAGE_TEXT, MESSAGE_SECOND_LEVEL_TEXT  FROM TABLE(QSYS2.JOBLOG_INFO('674408/GOMA/GOMADSP1') );
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/744c5d97-fcf6-e5f1-db1a-67235b9ebd95.png)

赤線の行がエラーのようです。存在しないCLプログラム名を指定していたようです。