ODCが提供するJavaScript APIの中に、ログ出力を行うLoggerがある。
ドキュメント
erorr API
役割・機能
クライアント側から、ODC PortalのLogsにログを出力する。
SeverityはError。
使い方
Client ActionのフローにJavaScript要素を配置し、以下のように呼ぶ。
// カテゴリとエラーメッセージを指定するパターン
$public.Logger.error("Logger Test", "Error Message");
// ↑に加えてError Objectを指定するパターン(例外処理時に使う)
let err = new Error("Error Object");
$public.Logger.error("Logger Test", "Error Message", err);
引数は、以下の通り。1と2が必須。
- category (string): 出力するログをグループにまとめるキー情報らしい。現時点(2025/01/26) では特に使われていないように見える
- message (string) または error (Errorオブジェクト): ODC Portal/LogsでMessageとして出力される
- (任意)error (Errorオブジェクト): 指定したら、messageに加えてErrorオブジェクトの滅っセージ部分も出力された
以下は、2番目の例(messageとerror療法を指定)での出力結果。Message項目を見ると、APIのmessageが1行目、errorのメッセージ部分は2行目に出力されている。
サーバー側へログを登録する通信を覗いて見る
ブラウザの開発者ツール > ネットワークタブを開いた状態でログを発生させて覗いてみる。
この観察によると、
- JavaScript APIで記録したログは、「https://Host/App名/v2/logs」というアドレスへのリクエストでサーバーに反映される
- 短時間に複数のログAPI呼び出しをすると、一度のv2/logs呼び出しで複数のログが記録される
- 各ログは、v2/logs呼び出しリクエストのresourceLogs[0]/scopeLogs[0]/logRecordsに配列要素として渡される
- いくつかODC Portal/Logsページも併せて検討すると、恐らく
- attributes配列内のkeyがexceptionで始まる要素に渡したErrorオブジェクトの情報がわたる
- 渡したcategoryはattributes配列内のkey=outsystems.log.message.tag項目に入る
- attributes配列内のkey=outsystems.error.codeの要素には、ODCが決めたエラーコードが自動設定される→ODC Portal/LogsではMessageの先頭に表示される
- 渡したエラーメッセージそのものは、attributesではなく、body/stringValueに渡される
- severityNumberとseverityTextでログレベルの制御をしていそう
2025/01/26時点ではサーバサイドでエラーログを出力するにはException Handlerを使うしかないと思う。しかし、上で見た方法ででErrorログを出せるなら、基盤側にはエラーログを受け取る機能はあるので、OutSystems 11にあったLogErrorをODCにも作って欲しいところ。
log API
役割・機能
クライアント側から、ODC PortalのLogsにログを出力する。
SeverityはInfo。
使い方
Client ActionのフローにJavaScript要素を配置し、以下のように呼ぶ。
// カテゴリとエラーメッセージを指定するパターン
$public.Logger.log("Logger Test", "Info Message");
引数は、以下の通り。ドキュメントには記載がないが、省いて実行してもエラーが出なかったので1も2も必須では無さそう。messageを省いてしまうとログの意味がないが。
- category (string): 出力するログをグループにまとめるキー情報らしい。現時点(2025/01/26) では特に使われていないように見える
- message (string) または error (Errorオブジェクト): ODC Portal/LogsでMessageとして出力される
オフラインでもAPIの実行は可能
ブラウザの開発者ツールを使い、ネットワークがない状態でAPIを実行してみた。
その後ネットワーク有りの状態に戻してしばらく待つと、自動的にv2/logsアドレスへの通信が発生した。オフライン時にAPIを実行すると、しばらくローカルに持っておき、復帰後に連携する仕組みのようだ。
ブラウザの機能でネットワークがない状態を作る機能は、Chromeの場合は以下の場所にある。
下の赤枠部分をOfflineにすると、ネットワークなしの状態をシミュレートできる。
ODCのJavaScript API関係の過去記事