Я пытался выяснить, могу ли я изменить фильтр приложения во время выполнения, которое я определил через файл конфигурации.Как изменить фильтры журнала log4perl во время выполнения?
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
, но сделать это после того, как моя программа начала работать.
Poking на APPENDER_BY_NAME
хэш для SCREEN
с использованием Data :: Dumper показывает следующее:
$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');
Но отводом с этим HASH кажется хаком мне. Есть ли лучший способ изменить фильтры appender?
В зависимости от того, что большая изображение, 'Log :: Log4perl-> init_and_watch' может сделать. – ikegami