4

log4perlを使用する場合、使用しているデバッグ ログのレイアウトは次のとおりです。

log4perl.appender.D10.layout=PatternLayout
log4perl.appender.D10.layout.ConversionPattern=%d [pid=%P] %p %F{1} (%L) %M %m%n
log4perl.appender.D10.Filter = DebugAndUp

これにより、非常に詳細なデバッグ ログが生成されます。次に例を示します。

2008/11/26 11:57:28 [pid=25485] DEBUG SomeModule.pm (331) functions::SomeModule::Test Test XXX was successfull
2008/11/26 11:57:29 [pid=25485] ERROR SomeOtherUnrelatedModule.pm (99999) functions::SomeModule::AnotherTest AnotherTest YYY has faled

これはうまく機能し、優れたデバッグ データを提供します。

ただし、デバッグ ログの各行には、異なる関数名、pid の長さなどが含まれます。これにより、各行のレイアウトが異なり、デバッグ ログの読み取りが必要以上に難しくなります。

デバッグ メタデータ (実際のログ メッセージまでのすべて) の最後にスペース/タブが埋め込まれ、実際のメッセージがテキストの同じ列から始まるように、log4perl で行をフォーマットする方法はありますか?

4

2 に答える 2

8

エントリを構成する単一のフィールドを埋めることができます。たとえば、[pid=%5P] は常に PID に少なくとも 5 文字を与えます。

Log::Log4perl::Layout のドキュメントの「Quantify Placeholders」セクションに詳細が記載されています。

于 2008-11-26T11:58:14.097 に答える
5

これにはいくつかの方法がありますが、状況に適した方法を見つける必要があります。

  1. ライブで作業している場合は、別のアペンダーを使用してください。そのアペンダーに、必要な情報のみを表示するパターンを使用させます。たとえば、単一のプロセスで作業している場合、代替アペンダーが PID とタイムスタンプを省略している可能性があります。ファイル名と行番号だけが必要な場合があります。

  2. %n改行を適切な場所に配置するために使用します。これにより、後で解析するのが少し難しくなる複数行の出力になりますが、エントリごとに読みやすくするために、入力レコード区切り文字 (たとえば、リテラル "[EOL]") に別のシーケンスを選択できます。

  3. ファイルではなくデータベースにログを記録します。レポートでは、調査する列のみを選択します。

  4. すべてをログに記録しますが、デバッグ メッセージのみ、特定の時間の間のエントリ、ファイルに関連するエントリのみなど、必要な部分だけを表示するためにログ ファイルをアドホックに通過するフィルタを記述します。 .

于 2008-11-26T12:23:48.647 に答える