使用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中格式化行,以便调试元数据(直到实际日志消息的所有内容)在末尾用空格/制表符填充,并使实际消息从同一列文本开始?
您可以填充构成条目的单个字段.例如,[pid =%5P]将始终为PID提供至少5个字符.
Log :: Log4perl :: Layout文档中的"Quantify Placeholders"部分提供了更多详细信息.
有几种方法可以解决这个问题,尽管你必须找出哪种方法可以更好地适应你的情况:
如果您正在工作,请使用不同的appender.让appender使用只显示所需信息的模式.例如,如果您在单个进程中工作,则备用appender可能会忽略PID和时间戳.您可能只需要文件名和行号.
使用%n
把换行符在正确的地方.这使得它的多行输出稍后难以解析,但您可以为输入记录分隔符选择另一个序列(例如,文字"[EOL]"),以便于逐个条目地读取.
记录到数据库而不是文件.对于报告,只需选择要检查的列.
记录所有内容,但编写过滤器以通过日志文件ad-hoc显示您想要查看的部分,例如仅显示调试消息,特定时间之间的条目,仅涉及文件的条目等等.