IBM i Services Directory : QSYS2.History_Log_Info テーブル関数

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

IBM i OSやH/W,ファームウェアなどの重要なメッセージの出力先であるQHSTヒストリーログを検索するSQLサービスです。
従来の5250端末ではDSPLOG QHST コマンドでQHSTヒストリーログを検索できますが、現代的なインターフェースとは呼べないかもしれません。（機能的な支障はまったくありませんが）
・・・操作感に多少慣れが必要な方が最近の技術者にはハードルがあるかもしれませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/620c5d11-f1f3-991e-2113-bed1d261fd80.png)


## QSYS2.HISTORY_LOG_INFO 実行例
***ACS 例から挿入 で生成されるサンプル*** がこちらです。

```
--  category:  IBM i Services
--  description:  History Log - Study job longevity 

   WITH JOB_START(start_time, from_user, sbs, from_job) AS (
     SELECT message_timestamp as time, 
          from_user, 
          substr(message_tokens, 59, 10) as subsystem,
          from_job
     FROM TABLE(qsys2.history_log_info(START_TIME => CURRENT DATE,
                                       END_TIME   => CURRENT TIMESTAMP)) x           
     WHERE message_id = 'CPF1124'
     ORDER BY ORDINAL_POSITION DESC
   ) SELECT TIMESTAMPDIFF(4, CAST(b.message_timestamp - a.start_time AS CHAR(22)))
              AS execution_minutes, DAYNAME(b.message_timestamp) AS JOB_END_DAY, 
            a.from_user, a.from_job, a.sbs
     FROM JOB_START A  INNER JOIN
          TABLE(qsys2.history_log_info(START_TIME => CURRENT DATE,
                                       END_TIME   => CURRENT TIMESTAMP)) b
          ON b.from_job = a.from_job 
     WHERE b.message_id = 'CPF1164'
     ORDER BY execution_minutes desc limit 20;
```

何やら長いですが、***QHSTからCPF1124を出力したジョブをジョブ実行時間の長い順に20個まで出力する、というもののようです。***
CPF1124のメッセージをDSPMSGDコマンドで確認すると、下記のようにでました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/3a3ed7ea-31df-25f2-b4aa-3fa3f10dd57f.png)

ジョブが開始された時刻を識別できるメッセージのようです。

実行してみますと下記の結果になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0fa9b67f-263c-6242-05d9-6f80618d7894.png)

実行曜日が　土曜日　日本語表示でみやすいですね。

## シンプルな実行例
```
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO()) 
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/419881be-b9a1-be90-6cca-9b46ccffc45b.png)

QHSTのログを全部新しい方から並べて見えるようです。必要なカラムだけに絞り込む、ユーザーを絞り込む等すれば見やすいかもしれません。

### シンプルな実行例にカラム選択を追加

メッセージID, 時刻、ジョブ名、メッセージテキストを表示
```
SELECT MESSAGE_ID, MESSAGE_TIMESTAMP, FROM_JOB, MESSAGE_TEXT FROM TABLE(QSYS2.HISTORY_LOG_INFO()) ; 
```
このへんがミニマムでしょうか・・メッセージIDをセレクトするといい感じかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/396ab8b5-500f-841b-c4e4-7cb078320a0f.png)

## 過去24時間に、あるユーザーが出力したヒストリー・ログを検索する

サンプルはコチラです。ユーザー名の GOMA は任意のユーザープロフィールに置き換えてください。
```
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO(CURRENT TIMESTAMP - 1 DAY))  WHERE FROM_USER= ('GOMA') ; 
```

実行結果例です。さらにメッセージタイプやメッセージID, 重大度SEVERITYでフィルターすると使えそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/c2757035-61d7-6869-927e-c5c2be430890.png)

### 重大度20以上でフィルターする
```
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO(CURRENT TIMESTAMP - 1 DAY))  WHERE FROM_USER= ('GOMA') and SEVERITY>='20' ; 
```

結果は・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7a7abd34-e623-5884-5d10-e379e913a3e6.png)

なかなか、いいのではないでしょうか。

##