2
Log4perlでは、%T形式の文字列を使用して完全なスタックトレースを含めることができます。Log4perlでスタックトレースの一部を印刷するには?
スタックトレースの一部を印刷する方法はありますか?言って、最初のNレベル?
Log4perlでは、%T形式の文字列を使用して完全なスタックトレースを含めることができます。Log4perlでスタックトレースの一部を印刷するには?
スタックトレースの一部を印刷する方法はありますか?言って、最初のNレベル?
あなたはLog::Log4perl::Layout::PatternLayout::Stacktraceを使用することができます。
use strict;
use warnings 'all';
use Log::Log4perl::Layout::PatternLayout::Stacktrace;
sub foo { bar() }
sub bar { baz() }
sub baz { Log::Log4perl->get_logger->warn('baz') }
$ENV{L4P_STACKTRACE_MAX} = 3; # max number of stack frames to show
Log::Log4perl->init('log4perl.conf');
foo();
これはあなたのパターンで%S
書式指定子を使用することができます:
log4perl.rootLogger=DEBUG, SCREEN
log4perl.appender.SCREEN=Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.layout=PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern=%S
出力:
==== START STACK TRACE ===
[1] at ./foo line 10
__ANON__ (Log::Log4perl::Logger=HASH(0x1a41a68), "baz")
[2] at ./foo line 9
baz()
[3] at ./foo line 8
bar()
... 1 frames cut off
=== END STACK TRACE ===
を取得するにはより多くの%T
が発生するもののようなもの、%S
のパラメータとして、カスタム書式を渡す(ログイン:: Log4perl 1.20以上が必要です):
log4perl.appender.SCREEN.layout.ConversionPattern= \
%S{%s called at %f line %l%[nr!L4P_STACKTRACE_MAX,s=]b}
サポートする書式指定子のためにStacktrace::Configurableのマニュアルを参照してください。
出力:
Log::Log4perl::Logger::__ANON__ called at ./foo line 10
main::baz called at ./foo line 9
main::bar called at ./foo line 8