メインコンテンツまでスキップ
バージョン: v19

ログファイルの詳細

4Dアプリケーションは、デバッグや実行の最適化のために有用な複数のログファイルを生成することができます。 ログは通常 SET DATABASE PARAMETER あるいは WEB SET OPTION コマンドのセレクターを使用して開始・停止され、プロジェクトの Logsフォルダー 内に保存されます。

記録された情報は、問題の検知と修正のためには分析する必要があります。 この章では、以下のログファイルの詳細を説明します:

注: サーバーとクライアントの両方においてログファイルが生成可能な場合、サーバー側のログファイル名には "Server" が追加されます。たとえば、"4DRequestsLogServer.txt" のようにです。

これらのログファイルは、デバッグ中に時系列を確立しエントリー間のつながりを分かりやすくするために、いくつかのフィールドを共有しています:

  • sequence_number: この番号はすべてのデバッグログ間において固有で重複せず、ログファイルに関わらず新しいエントリーごとに増分されるので、オペレーションの厳密な順番を知ることができます。
  • connection_uuid: 4Dクライアントで作成されサーバーに接続する 4Dプロセスについては、この接続UUID がサーバー側とクライアント側とで記録されます。 これにより各プロセスを開始したリモートクライアントを簡単に識別することができます。

4DRequestsLog.txt

このログファイルは、コマンドを実行した 4D Serverマシンあるいは 4Dリモートマシンによっておこなわれる標準のリクエストを記録します (Webリクエストを除く)。

このログの開始方法:

  • サーバー上:
SET DATABASE PARAMETER(4D Server log recording;1)
// サーバーサイド
  • クライアント上:
SET DATABASE PARAMETER(Client Log Recording;1)
// リモートサイド

この宣言は 4DRequestsLog_ProcessInfo.txt ログファイルも開始させます。

ヘッダー

このファイルは以下のヘッダーから始まります:

  • Logセッション識別子
  • アプリケーションをホストしているサーバーのホスト名
  • ユーザーログイン名: サーバー上で 4Dアプリケーションを実行したユーザーの OS上のログイン名

内容

各リクエストに対して、以下のフィールドが記録されます:

フィールド名説明
sequence_numberログセッション内で固有かつシーケンシャルなオペレーション番号
time'YYYY-MM-DDTHH:MM:SS.mmm' の ISO 8601フォーマットを使用した日付と時間
systemidシステムID
componentコンポーネント署名 (例: '4SQLS' または 'dbmg')
process_info_index4DRequestsLog_ProcessInfo.txt ログの "index"フ ィールドに対応し、リクエストとプロセスのリンクを可能にします。
requestC/SでのリクエストID、あるいは SQLリクエストまたは LOG EVENT メッセージ用のメッセージ文字列
bytes_in受信したバイト数
bytes_out送信したバイト数
server_duration | exec_durationログが生成された場所によって変わります:
  • server_duration (クライアント上で生成された場合) -- サーバーがリクエストを処理し、レスポンスを返すまでにかかった時間 (マイクロ秒単位)。 以下の画像の B から F までに相当します。あるいは
  • exec_duration (サーバー上で生成された場合) -- サーバーがリクエストを処理するまでにかかった時間 (マイクロ秒単位)。 以下の画像の B から E までに相当します。
  • write_duration次のものを送信するのにかかった時間 (μs):
  • リクエスト (クライアント上で実行された場合)。 以下の画像の A から B までに相当します。
  • レスポンス (サーバー上で実行された場合)。 以下の画像の E から F までに相当します。
  • task_kindプリエンプティブかコオペラティブか (それぞれ 'p' と 'c' で表される)
    rttクライアントがリクエストを送信してサーバーがそれを受け取るまでにかかる時間の概算 (マイクロ秒単位)。 以下の画像の Aから Dまでと Eから Hまでに相当します。
  • ServerNet ネットワークレイヤーを使用している場合にのみ計測されます。旧式ネットワークレイヤを使用していた場合には 0 が返されます。
  • Windows 10、あるいは Windows Server 2016 以前のバージョンの Windows においては、これを呼び出すと 0 が返されます。
  • リクエストフロー:

    4DRequestsLog_ProcessInfo.txt

    このログファイルは、コマンドを実行した 4D Serverマシンあるいは 4Dリモートマシンによって作成された各プロセスについての情報を記録します (Webリクエストを除く)。

    このログの開始方法:

    • サーバー上:
    SET DATABASE PARAMETER(4D Server log recording;1) // サーバーサイド
    • クライアント上:
    SET DATABASE PARAMETER(Client Log Recording;1) // リモートサイド

    この宣言は 4DRequestsLog.txt ログファイルも開始させます。

    ヘッダー

    このファイルは以下のヘッダーから始まります:

    • Logセッション識別子
    • アプリケーションをホストしているサーバーのホスト名
    • ユーザーログイン名: サーバー上で 4Dアプリケーションを実行したユーザーの OS上のログイン名

    内容

    各プロセスに対して、以下のフィールドが記録されます:

    フィールド名説明
    sequence_numberログセッション内で固有かつシーケンシャルなオペレーション番号
    time"YYYY-MM-DDTHH:MM:SS.mmm" の ISO 8601フォーマットを使用した日付と時間
    process_info_index固有かつシーケンシャルなプロセス番号
    CDB4DBaseContextDB4DコンポーネントデータベースコンテキストUUID
    systemidシステムID
    server_process_idサーバー上のプロセスID
    remote_process_idクライアント上のプロセスID
    process_nameプロセス名
    cID4D接続の識別子
    uID4Dクライアントの識別子
    IP ClientIPv4/IPv6アドレス
    host_nameクライアントのホスト名
    user_nameクライアント上のユーザーログイン名
    connection_uuidプロセス接続の UUID識別子
    server_process_unique_idサーバー上の固有プロセスID

    HTTPDebugLog.txt

    このログファイルは、各 HTTPリクエストとそれぞれのレスポンスを rawモードで記録します。 ヘッダーを含むリクエスト全体が記録され、オプションでボディ部分も記録することができます。

    このログの開始方法:

    WEB SET OPTION(Web debug log;wdl enable without body) // 他の値も使用可能

    リクエストとレスポンスの両方に対して以下のフィールドが記録されます:

    フィールド名説明
    SocketID通信に使用されたソケットの ID
    PeerIPホスト (あるいはクライアント) の IPv4アドレス
    PeerPortホスト (あるいはクライアント) が使用したポート番号
    TimeStamp(システムが開始されてからの) ミリ秒単位でのタイムスタンプ
    ConnectionID接続UUID (通信に使用された VTCPSocket の UUID)
    SequenceNumberログセッション内で固有かつシーケンシャルなオペレーション番号

    4DDebugLog.txt (標準)

    このログファイルは、4Dプログラミングレベルで発生するそれぞれのイベントを記録します。 標準モードではイベントの基本的なビューを提供します。

    このログの開始方法:

    SET DATABASE PARAMETER(Debug Log Recording;2)  
    // 標準、全プロセスを記録

    SET DATABASE PARAMETER(Current process debug log recording;2)
    // 標準、カレントプロセスのみを記録

    それぞれのイベントに対して、以下のフィールドが記録されます:

    カラム番号説明
    1ログセッション内で固有かつシーケンシャルなオペレーション番号
    2ISO 8601フォーマットの日付と時間 (YYYY-MM-DDTHH:MM:SS.mmm)
    3プロセスID (p=xx) と固有プロセスID (puid=xx)
    4スタックレベル
    5コマンド名/メソッド名/メッセージ/タスクの開始・停止情報/プラグイン名、イベント、あるいはコールバックUUID または接続UUID
    6ログオペレーションにかかった時間 (ミリ秒単位)

    4DDebugLog.txt (タブ分け)

    このログファイルは、4Dのプログラミングレベルで発生する各イベントについて、(標準フォーマットに比べて) 追加情報を含めた、タブ分けされたコンパクトなフォーマットで記録します。

    このログの開始方法:

    SET DATABASE PARAMETER(Debug Log Recording;2+4)  
    // 拡張されたタブ分けされたフォーマット、全プロセスを記録

    SET DATABASE PARAMETER(Current process debug log recording;2+4)
    // 拡張されたタブ分けされたフォーマット、カレントプロセスのみを記録

    それぞれのイベントに対して、以下のフィールドが記録されます:

    カラム番号フィールド名説明
    1sequence_numberログセッション内で固有かつシーケンシャルなオペレーション番号
    2timeISO 8601フォーマットの日付と時間 (YYYY-MM-DDTHH:MM:SS.mmm)
    3ProcessIDプロセスID
    4unique_processID固有プロセスID
    5stack_levelスタックレベル
    6operation_typeログオペレーションタイプ。 この値は絶対値を取ることがあります:
    1. コマンド
    2. メソッド (プロジェクトメソッド、データベースメソッド、等)
    3. メッセージ (LOG EVENT コマンドによって送信されたもののみ)
    4. プラグインメッセージ
    5. プラグインイベント
    6. プラグインコマンド
    7. プラグインコールバック
    8. タスク
    9. メンバーメソッド (コレクションまたはオブジェクトに割り当てられているメソッド)
    スタックレベルを閉じる時には、operation_typeoperation および operation_parameters カラムには stack_opening_sequence_number カラムに記録された開始スタックレベルと同じ値が記録されます。 例:
    1. 121 15:16:50:777 5 8 1 2 CallMethod Parameters 0
    2. 122 15:16:50:777 5 8 2 1 283 0
    3. 123 15:16:50:777 5 8 2 1 283 0 122 3
    4. 124 15:16:50:777 5 8 1 2 CallMethod Parameters 0 121 61
    1行目と 2行目はスタックレベルを開き、3行目と 4行目はスタックレベルを閉じます。 6、7、8カラム目の値は、終了スタックレベル行において繰り返されます。 10カラム目にはスタックレベル開始番号、つまり 3行目の 122 と 4行目の 121 が格納されます。
    7operation以下のいずれかを表す可能性があります (オペレーションタイプによる):
  • ランゲージコマンドID (type=1 の場合)
  • メソッド名 (type=2 の場合)
  • pluginIndex;pluginCommand の組み合わせ (type=4、5、6 または 7 の場合)。 '3;2' のような形式で格納されます。
  • タスク接続UUID (type=8 の場合)
  • 8operation_parametersコマンド、メソッド、プラグインに渡された引数
    9form_eventフォームイベント (あれば)。その他の場合には空になります (フォームメソッドまたはオブジェクトメソッド内でコードが実行された場合に使用されると考えて下さい)
    10stack_opening_sequence_numberスタックレベルを閉じる時のみ: 開始スタックレベルに対応するシーケンス番号
    11stack_level_execution_timeスタックレベルを閉じる時のみ: 現在記録されているアクションの経過時間をマイクロ秒単位で表します (上記ログの123 行目と124 行目の 10番目のカラムを参照ください)

    4DDiagnosticLog.txt

    このログファイルには、アプリケーションの内部オペレーションに関連した複数のイベントが、人間にも読めるように記録されます。 LOG EVENT コマンドを使用することで、カスタムの情報をこのファイルに含めることができます。

    このログの開始方法:

     SET DATABASE PARAMETER(Diagnostic log recording;1) // 記録を開始

    それぞれのイベントに対して、以下のフィールドが記録されます:

    フィールド名説明
    sequenceNumberログセッション内で固有かつシーケンシャルなオペレーション番号
    timestampISO 8601フォーマットの日付と時間 (YYYY-MM-DDTHH:MM:SS.mmm)
    loggerID任意
    componentSignature任意 - 内部コンポーネント署名
    messageLevel情報、警告、エラーなど
    messageログエントリーの詳細

    イベントによって、タスク、ソケットなど様々な他のフィールドを記録に含めることができます。

    4DSMTPLog.txt, 4DPOP3Log.txt, および 4DIMAPLog.txt

    これらのログファイルは、以下のコマンドを使用して始動された、4Dアプリケーションとメールサーバー (SMTP、POP3、IMAP) 間の通信をそれぞれ記録します:

    2種類のログファイルを生成することができます:

    • 通常バージョン:

      • 4DSMTPLog.txt, 4DPOP3Log.txt, および 4DIMAPLog.txt と名前がつけられます。
      • 添付ファイルは含めません
      • 10MBごとの自動循環ファイルリサイクルを使用します。
      • 通常のデバッギング用途を想定しています。

      このログを開始するには:

      SET DATABASE PARAMETER(SMTP Log;1) // SMTPログを開始
      SET DATABASE PARAMETER(POP3 Log;1) // POP3ログを開始
      SET DATABASE PARAMETER(IMAP Log;1) // IMAPログを開始

      4D Server: 4D Server 管理ウィンドウ内の メンテナンスページリクエストとデバッグのログを開始 ボタンをクリックします。

      このログのパスは Get 4D file コマンドによって返されます。

    • 拡張バージョン:

      • 添付ファイルも含まれます。 自動ファイルリサイクルは使用されません。
      • カスタムの名前を使用できます。
      • 特定の目的のために用意されています。

      このログを開始するには:

      $server:=New object
      ...
      //SMTP
      $server.logFile:="MySMTPAuthLog.txt"
      $transporter:=SMTP New transporter($server)

      // POP3
      $server.logFile:="MyPOP3AuthLog.txt"
      $transporter:=POP3 New transporter($server)

      //IMAP
      $server.logFile:="MyIMAPAuthLog.txt"
      $transporter:=IMAP New transporter($server)

    内容

    各リクエストに対して、以下のフィールドが記録されます:

    カラム番号説明
    1ログセッション内で固有かつシーケンシャルなオペレーション番号
    2RFC3339 フォーマットの日付と時間 (yyyy-mm-ddThh:mm:ss.ms)
    34DプロセスID
    4固有プロセスID
    5
    • SMTP、POP3、または IMAPセッションスタートアップ情報。サーバーホスト名、SMTP、POP3、または IMAPサーバーに接続するのに使用された TCPポート番号と TLSステータス。あるいは
    • サーバーとクライアント間でやりとりされたデータ。 "S <" (SMTP、POP3、 または IMAPサーバーから受信したデータ) または "C >" (SMTP、POP3、または IMAPクライアントから送信されたデータ) から始まります: サーバーから送信された認証モードの一覧と選択された認証モード、SMTP、POP3、または IMAPサーバーから報告されたエラー、送信されたメールのヘッダー情報 (通常バージョンのみ) およびメールがサーバー上に保存されているかどうか。あるいは
    • SMTP、POP3、または IMAPセッションの切断情報。

    ORDAクライアントリクエスト

    このログファイルには、リモートマシンが送信する ORDAリクエストが記録されます。 ログ情報はメモリか、ディスク上のファイルに書くことができます。 このログファイルの名称や保管場所は任意に決めることができます。

    このログの開始方法:

    // リモートマシンで実行します
    ds.startRequestLog(File("/PACKAGE/Logs/ordaLog.txt"))
    // メモリに送ることもできます

    ORDAリクエストログにおいてユニークなシーケンス番号を使うには、次のように開始します:

    // リモートマシンで実行します

    SET DATABASE PARAMETER(Client Log Recording;1)
    // ログシーケンス番号の有効化

    ds.startRequestLog(File("/PACKAGE/Logs/ordaLog.txt"))
    // メモリに送ることもできます

    SET DATABASE PARAMETER(Client Log Recording;0)
    // ログシーケンス番号の無効化

    各リクエストに対して、以下のフィールドが記録されます:

    フィールド名説明例題
    sequenceNumberログセッション内で固有かつシーケンシャルなオペレーション番号104
    urlクライアントの ORDAリクエストURL"rest/Persons(30001)"
    startTime開始日時 (ISO 8601 フォーマット)"2019-05-28T08:25:12.346Z"
    endTime終了日時 (ISO 8601 フォーマット)"2019-05-28T08:25:12.371Z"
    durationクライアント処理時間 (ミリ秒)25
    responseサーバーレスポンスオブジェクト{"status":200,"body":{"__entityModel":"Persons",[...]