2016-07-08 3 views

답변

3

당신은 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