ORDAコールのログをサーバー上に残す

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の管理ウィンドウのメンテナンスタブから直接起動することも可能です。

blank
Start Request and Debug Logsボタンを押すと、リクエストログとORDAログの両方がアクティブになります。

この2つの機能は、ORDA呼び出しのトラブルシューティングと最適化に役立つことが期待されます。コメントや質問がある場合は、是非遠慮なく4Dフォーラムにお寄せください。

Nicolas Brachfogel
- プロダクトオーナー & シニアデベロッパー - Nicolas Brachfogelは、2017年にシニアデベロッパーとして4Dに入社しました(4D Serverとネットワークを担当)。Apple Siliconのリリースを管理するプロダクトオーナーとして、ユーザーストーリーを書いて機能仕様に落とし込み、機能実装が顧客のニーズを満たしているかを確認する役割を担っています。Institut Supérieur d'Informatique Appliquée (INSIA) を卒業した Nicolas は、2001年にソフトウェア開発者としてのキャリアをスタートさせました。JavaとC++で数年間コーディングした後、ゲーム会社のクライアント・サーバー開発を専門に担当。サーバー開発者/アーキテクトとして、多くのゲーム(Dofus Arena、Drakerz、Trivial Pursuit Go!)のサーバーアーキテクチャに携わり、成功を収めてきました。