加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在运行时更改log4perl appender的过滤器?

发布时间:2020-12-16 06:25:28 所属栏目:大数据 来源:网络整理
导读:我一直试图弄清楚我是否可以在运行时更改appender的过滤器,我已经通过配置文件定义了. log4perl.filter.M1 = Log::Log4perl::Filter::LevelMatchlog4perl.filter.M2 = Log::Log4perl::Filter::LevelMatchlog4perl.filter.M1.LevelToMatch = INFOlog4perl.fil
我一直试图弄清楚我是否可以在运行时更改appender的过滤器,我已经通过配置文件定义了.

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

我想将此筛选器从MyBoolean0更改为SCREEN更改为MyBoolean1,但是在程序开始运行后执行此操作.

使用Data :: Dumper查看SCREEN的APPENDER_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','M2' => bless( {·
                                                         'LevelToMatch' => 'WARN','name' => 'M2','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' );

但是这个HASH的混乱对我来说似乎很骇人听闻.有没有更好的方法来更改appender的过滤器?

解决方法

您可以使用未记录的appender属性过滤器:

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

您也可以使用两个appender:

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
    )
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读