ORDAのリリース以来、その人気はとどまることを知らず、今や本番環境のサーバーでも広く使われています。4D v20では、ORDAリクエストがサーバー側でどのようにログが記録されるかについて、2つの改良が施されています。1つ目は、リクエストログの改善で、ORDAの呼び出しに関するより多くの情報を記録するようになりました。もう1つは、クライアント側のORDAログと同様のサーバー側のORDAログが追加されたことです。それでは、これらの新機能をご紹介しましょう。
最初の改良点は、リクエストログに影響します。リクエストログは、本番サーバーを最適化したい場合に非常に重要です。受信したリクエスト、その処理にかかった時間、ネットワーク上で送信されたデータに関する情報を得ることができます。また、ログを有効にすることがパフォーマンスに影響を与えることを考慮することも重要です。リクエストログは非常に最適化されているため、サーバーのパフォーマンスにあまり影響を与えることなく、本番環境で使用することができます。
サーバーのリクエストログを有効にすると、ORDAのリクエストが14000番台のリクエストIDで記録されることがわかります(リクエストIDはこちらで確認できます)。また、追加のカラムにデータクラスや属性に関する情報が記載されています。たとえば、この行は Employee.Bloby という属性が変更されたことを示します(太字のリクエスト ID と追加カラムの内容です):
2つ目の改良点は、非常に使いやすいものです。データストアでstartRequestLogという関数を呼び出すことで、サーバー側のORDAログを有効にすることができます。例えば、以下のようなコードになります:
ds.startRequestLog()
このコードを実行すると、すべてのORDAリクエストがORDAlog.jsonlファイル内にログとして記録されます。サーバー側のORDAログはjson lines構文を使用し、各行は送信されたリクエストのjson記述となります。以下は、そのような行の例です:
{
"url": "rest/Company[4]",
"systemUserName": "nbrachfogel",
"userName": "Designer",
"machineName": "OPT9010-1168",
"taskID": 5,
"taskName": "P_1",
"startTime": "2023-05-22T14:29:00.289",
"response": {
"status": 200,
"body": {
"__entityModel": "Company",
"__DATACLASS": "Company",
"__KEY": "4",
"__TIMESTAMP": "2023-03-30T14:16:47.337Z",
"__STAMP": 1,
"ID": 4,
"Name": "Compagnie 31740",
"Turnover": 32205,
"MyEmployees": {
"__deferred": {
"uri": "/rest/Company[4]/MyEmployees?$expand=MyEmployees"
}
}
}
},
"sequenceNumber": 60,
"duration": 282
}
ユーザーに関する情報、リクエストの実行にかかった時間、サーバーからの応答が表示されます。また、リクエストログに記載されているのと同じ番号であるシーケンス番号が、両方のログをリンクするために表示されます(リクエストログが有効でない場合、ORDAログではシーケンス番号が省略されます)。
サーバー側のORDAログは、トラブルシューティングに非常に有効です。サーバーが受け取ったリクエストとそのレスポンスに関する詳細な情報を得ることができるからです。しかし、CPUとディスクスペースの両方で多くのリソースを消費するため、本番サーバーでは慎重に使用する必要があります。
これら2つのログは、ログ設定ファイルを使用するか、4D Serverの管理ウィンドウのメンテナンスタブから直接起動することも可能です。
Start Request and Debug Logsボタンを押すと、リクエストログとORDAログの両方がアクティブになります。
この2つの機能は、ORDA呼び出しのトラブルシューティングと最適化に役立つことが期待されます。コメントや質問がある場合は、是非遠慮なく4Dフォーラムにお寄せください。