OutSystemsで出力するログには、1つのリクエストに紐づく一連のログに共通のキーがあることを最近知りました。
折角なので動作確認してみました。
OutSystemsのログについて概説
OutSystemsでは、デフォルトで様々なログを取得しています。
また、(System)モジュールのLogMessage Actionを使うことでAction Flowの任意の位置からログ出力を行うことも可能です。
出力されたログはService CenterのMonitoringタブで確認できます。
LogMessageで出力したログはMonitoringタブの下のGeneralタブです。
このログには、PlatformLogs ExtensionのEntityを経由してアクセスすることも可能です。
共通キー:Request_Key
ログ関連の要求事項としてよく聞くのが、1つのリクエストから発生する複数のログ同士を関連付けられるようにしたい、というもの。
例:ボタンをクリックしたら
- まず開始ログ
- 別のServer Actionを呼び出したのでそこで出力されるログ
- 復帰可能な例外が発生したのでログだけ記録して処理を継続
- 終了ログ
といったように、一回のリクエストに複数ログが発生する場合、各ログを紐付ける属性としてRequest_Keyというものがあります。
障害発生時の調査などで、必要な情報だけ抜き出すなどの目的に使えます。
実際のログで確認してみる
テスト実装
Traditional Webで以下のような簡単な処理を作って出力されるログを確認してみます。
LogMessageでGeneralに3回、またException Handlerで処理する例外が発生するのでErrorに1回、計4回のログが出る処理です。
ログ確認
Service CenterにはRequest_Key属性が表示されません。
各ログ検索画面の右上あたりに「Export to excel」というボタンがあるので、これでExcelを取得するとRequest_Keyも含めたログがあります。
画面リクエストログ(Traditional Web Requests Log)
ボタンクリックで出たログは一番上の行。
Request_Key列が出ていますね。この列の値が以降の各種ログにも出力されていて、紐付けが可能であるはず。
LogMessageで出力したログ(General Log)
3つのログにちゃんと同じRequest_Keyが出力されています。
例外ログ(Error Log)
エラーログの場合は、Excelにエクスポートする以外に、詳細画面でもRequest_Keyを確認できます。
Request_Keyを持っているログの種類
ログデータに関するレファレンスに、ログのデータベース上での列情報が載っています。
Request_Keyを持っているのは
- Error
- General
- Screen
- Integration (SOAPやRESTのログです)
- Cyclic Job (Timer)
- Extension
- Mobile Request
ですね。
実際には、Errorおよび(または)Generalと他のテーブルを結合またはユニオンしてみることになるでしょう。
Log Entityを使ってみる
PlatformLogsから必要なEntityへの参照を追加します。
ちなみに、_Previousがついているのは前週のログ、ついていないのは当週のログです。
このEntityは普通にEntityとして検索できます。
(ただし、ログ用テーブルは書くことを重視しているため、直接検索されることは想定されていないそうです。負荷が高い検索をしたいなら、ログを別の場所に退避してそこで検索すべきとのこと)
3つのテーブルを画面で入力したRequest_Keyで検索して表示してみた例。
Action Flow中で任意にRequest_Keyを取得する
多分独自にログの仕組みを構築するためでしょうか。
PlatformRuntime ExtensionにRequest_GetKeyというActionが用意されています。