デバッグログファイルの管理
| 日付 | 2010/08/02 |
|---|---|
| ID | 76113 (英語原文参照) |
| バージョン | 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メソッドがそのファイルを削除してしまうからです。