我有一个运行在mod_perl下的Mason模板,它使用Log :: Log4perl。可以在不更新配置的情况下动态更改Perl的Log :: Log4perl的日志级别吗?
我想更改特定appender的日志级别,但更改配置非常尴尬,因为它必须通过我们的部署过程才能生效。
有没有办法在运行时更改appender的日志级别,在Apache启动之后,不更改配置文件,然后让该更改影响任何新的Apache线程?
我有一个运行在mod_perl下的Mason模板,它使用Log :: Log4perl。可以在不更新配置的情况下动态更改Perl的Log :: Log4perl的日志级别吗?
我想更改特定appender的日志级别,但更改配置非常尴尬,因为它必须通过我们的部署过程才能生效。
有没有办法在运行时更改appender的日志级别,在Apache启动之后,不更改配置文件,然后让该更改影响任何新的Apache线程?
如果您已经从Log::Log4perl::Level
进口的日志级别常量,那么你可以做这样的事情:
$logger->level($ERROR); # one of DEBUG, INFO, WARN, ERROR, FATAL
$logger->more_logging($delta); # Increase log level by $delta levels,
# a positive integer
$logger->less_logging($delta); # Decrease log level by $delta levels.
这似乎有点哈克给我,但它的工作原理:
$Log::Log4perl::Logger::APPENDER_BY_NAME{SCREEN}->threshold($DEBUG);
,并使其更有活力,你可以在该追加程序名称和级别变量传递。
%LOG4PERL_LEVELS =
(
OFF =>$OFF,
FATAL =>$FATAL,
ERROR =>$ERROR,
WARN =>$WARN,
INFO =>$INFO,
DEBUG =>$DEBUG,
TRACE =>$TRACE,
ALL =>$ALL
);
$Log::Log4perl::Logger::APPENDER_BY_NAME{$appender_name}->threshold($LOG4PERL_LEVELS{$new_level});
好吧,但我将如何指定我想更改日志级别的包? – 2011-06-13 12:53:56