gpt4 book ai didi

perl - 如何使用 Log4perl 打印部分堆栈跟踪?

转载 作者:行者123 更新时间:2023-12-04 13:43:38 25 4
gpt4 key购买 nike

Log4perl ,我知道我可以使用 %T 格式字符串包含完整的堆栈跟踪。

有没有办法打印部分堆栈跟踪?比如说,前 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(需要 Log::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

关于perl - 如何使用 Log4perl 打印部分堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com