LoginSignup
1
0

More than 3 years have passed since last update.

[OutSystems]Asynchronous Logging API

Posted at

ログ関係のAPIとしては(System)にあるLogMessage Action (Server/Client両方のActionがあり、出力先はGeneralログ)があります。他にも、ログ出力用と思われるAPIがあるのですが、ドキュメントだけでは不明な点があったため、実際に動作させて確認してみました。

環境

Personal Environment(Version 11.10.0 (Build 22910))
Service Studio (Version 11.9.2)
Asynchronous Logging API (For version 11.10.0.)

Asynchronous Logging API

OutSystemsが提供するAPIの1種で、AsynchronousLogging Extensionに含まれる、LogError/LogRecord/LogRequestEventの3つです。

ドキュメント:Asynchronous Logging API
以下の記述で出てくる「Request_Key」については、以前Request_GetKeyでログの関連付けを見られるで書きました。

このAPIは、非同期で実行(キューを利用)されます。

LogError

ドキュメントによると、

エラーをデータベースに非同期で挿入します。エラーはメッセージキューに保持され、しばらくしてからデータベースに一括挿入されます。

これだけだと、「エラー」とはどのようなエラーで、「データベース」とはどのデータベースのどのEntityのことか? 記述が曖昧ですね。

実際にプログラムを書いて試してみると、行き先は名前通りErrorログでした。つまり、「Service Center > Monitoring > Errorsで閲覧可能なあのエラーログを非同期に出力する機能」、でした。

実際に実行したActionのパラメーター(左)と実行したときにService Centerのエラーログの詳細画面に出力された内容(右)。
image.png

LogRecord

ドキュメントによると、

レコードをデータベースに非同期で挿入します。レコードはメッセージキューで保持され、しばらくしてからデータベースに一括挿入されます。

とLogErrorと似たような記述ですが、こっちで記録するのはエラーではなく「レコード」。よって任意のEntityに出力できそうな気配を感じます。

簡単なEntityを定義して実験してみましょう。
まず、Entityを

  • Entity名:LogRecordSample
  • Attribute
    • Message (Text)
    • Instant (Date Time)
    • Severity (Integer)

と定義し、この型の変数をパラメータに渡してLogRecordを呼んでみます。
定義したEntity型の変数を用意し、適当に編集(画像の上)し、実行後にView Dataした(下)もの。
image.png

なお、LogRecordはパラメータの型がObjectであるため、ToObject(Entity型変数)のようにして呼びます。

Forumの投稿ではEntity型ではうまく行かないような記述が見られたのですが、私が試して時点では出力できました。

結果としては、この機能は「任意のEntityに対し非同期にレコードを追加できる機能」ですね。

LogRecordの後に例外が発生したら?

となると、気になるのは、ログ出力がトランザクションと運命をともにするか(ロールバックしてもログは記録されるか)? ですね。しないのであればエラー処理時にもログを記録する機能として望ましい(キューが死んだらだめなので100%ではない)。

以下のように、同じ処理の最後をEndでなく、Raise Exceptionに変えてみました(OutSystemsでは、Handleされない例外で終わった通信の最後で自動的にロールバックされます)。ちゃんとログ出力されていますね。
image.png

LogRequestEvent

これはどうも、Production環境でないと使えない機能に関連していそうなので、私のPersonal Environmentでは確認できないです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0