gpt4 book ai didi

perl - 如何在运行时更改 log4perl 附加程序的过滤器?

转载 作者:行者123 更新时间:2023-12-02 00:27:45 25 4
gpt4 key购买 nike

我一直在尝试弄清楚是否可以在运行时更改我通过配置文件定义的附加程序过滤器。

log4perl.filter.M1               = Log::Log4perl::Filter::LevelMatch
log4perl.filter.M2 = Log::Log4perl::Filter::LevelMatch
log4perl.filter.M1.LevelToMatch = INFO
log4perl.filter.M1.AcceptOnMatch = true
log4perl.filter.M2.LevelToMatch = WARN
log4perl.filter.M2.AcceptOnMatch = true
log4perl.filter.MyBoolean0 = Log::Log4perl::Filter::Boolean
log4perl.filter.MyBoolean0.logic = M1
log4perl.filter.MyBoolean1 = Log::Log4perl::Filter::Boolean
log4perl.filter.MyBoolean1.logic = M1 || M2

log4perl.appender.SCREEN.Filter = MyBoolean0

我想将此过滤器从 SCREENMyBoolean0 更改为 MyBoolean1,但请在我的程序开始运行后执行此操作。

使用 Data::Dumper 查看 SCREENAPPENDER_BY_NAME 哈希显示以下内容:

$VAR1 = bless( {
'appender' => bless( {
'Filter' => 'MyBoolean0',
'color' => {
...
...
'filter' => bless( {·
'params' => {·
'M3' => bless( {·
'LevelToMatch' => 'ERROR',
'name' => 'M3',
'AcceptOnMatch' => 1
}, 'Log::Log4perl::Filter::LevelMatch' ),
'M1' => bless( {·
'LevelToMatch' => 'INFO',
'name' => 'M1',
'AcceptOnMatch' => 1
}, 'Log::Log4perl::Filter::LevelMatch' ),
'M2' => bless( {·
'LevelToMatch' => 'WARN',
'name' => 'M2',
'AcceptOnMatch' => 1
}, 'Log::Log4perl::Filter::LevelMatch' )
},
'name' => 'MyBoolean0',
'eval_func' => sub { "DUMMY" },
'logic' => 'M1 || M2 || M3'
}, 'Log::Log4perl::Filter::Boolean' ),
'warp_message' => undef,
'name' => 'SCREEN'
}, 'Log::Log4perl::Appender' );

但是对这个哈希进行破坏对我来说似乎很黑客。有没有更好的方法来更改附加程序的过滤器?

最佳答案

您可以使用未记录的附加程序的属性过滤器:

$Log::Log4perl::Logger::APPENDER_BY_NAME{'SCREEN'}->filter(
Log::Log4perl::Filter::by_name('MyBoolean1')
);

您也可以使用两个附加程序:

log4perl.appender.SCREEN0.Filter = MyBoolean0
log4perl.appender.SCREEN1.Filter = MyBoolean1

并在运行时更改它:

$logger->remove_appender('SCREEN0', 1);
$logger->add_appender(
Log::Log4perl::Config::create_appender_instance(
$Log::Log4perl::Config::OLD_CONFIG,
'SCREEN1',
\%Log::Log4perl::Logger::APPENDER_BY_NAME
)
);

关于perl - 如何在运行时更改 log4perl 附加程序的过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21487396/

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