Tips

デバッグログファイルの管理

日付2010/08/02
ID76113 (英語原文参照)
バージョンv11
プラットフォームMac/Win

デバッグログには, データベースで実行されたすべてのコード, またフォームの開閉といったアクションを記録することができ, それだけに, かなりのファイルサイズに達する可能性があります。ドキュメントに記述されているとおり, このファイルの目的はデバッグであり, 恒常的に設定を有効にすることは推奨されていません。アプリケーションのパフォーマンスや, ハードディスクの容量に望ましく影響を及ぼす恐れがあるからです。

とはいえ, デバッグログには運用中に発生した問題の原因を特定するのに役立つ情報が納められており, 上手に活用するならば, たいへん有効なツールです。たとえば, デバッグログファイルのサイズを制約し, また最近の情報だけが常に残されるよう, 次のような方法を取ることができるかもしれません。

On Startupデータベースメソッド(またはOn Server Startup)で, 下記のようなコードを実行します。

C_LONGINT(proc) proc:=New process("manage_log_scheduler";64*1024;"log_recording_process")

起動した新規プロセスでは, manage_log_schedulerメソッドを実行します。

  //start debug log
SET DATABASE PARAMETER(Debug Log Recording;2)

  //delay process for 5 minutes
DELAY PROCESS(Current process;60*60*5)

  //run loop, delete existing log and then delay process for 5 minutes
While(True)

    //turn off debug log recording so all log files are closed
  SET DATABASE PARAMETER(Debug Log Recording;0)

    //delete 4DDebugLog documents
  ARRAY TEXT(docsArray;0)
  DOCUMENT LIST(Get 4D folder(Logs Folder);docsArray)
    C_LONGINT($i)
  For ($i;1;Size of array(docsArray))
    If (docsArray{$i}="4DDebugLog_@")
      DELETE DOCUMENT(Get 4D folder(Logs Folder)+docsArray{$i})
    End if 
  End for 

    //turn on debug log recording again
  SET DATABASE PARAMETER(Debug Log Recording;2)

    //delay process for 5 minutes again
  DELAY PROCESS(Current process;60*60*5)
End while

つまり, メソッドは定期的に作動し, 古いデバッグログファイルを削除し, ログファイルが際限なく増えてしまわないようにします。問題が発生したときには, なるべく時間を置かずに当時のログファイルを取り分けておくことが肝心です。そうしないと, やがてmanage_log_recordingメソッドがそのファイルを削除してしまうからです。