【发布时间】:2011-08-22 14:51:22
【问题描述】:
我有一个在 mod_perl 下运行的 Mason 模板,它使用 Log::Log4perl。
我想更改特定附加程序的日志级别,但是更改配置太麻烦了,因为它必须通过我们的部署过程才能上线。
有没有办法在运行时更改附加程序的日志级别,在 Apache 启动之后,而不更改配置文件,然后让该更改影响任何新的 Apache 线程?
【问题讨论】:
标签: perl apache logging mod-perl log4perl
我有一个在 mod_perl 下运行的 Mason 模板,它使用 Log::Log4perl。
我想更改特定附加程序的日志级别,但是更改配置太麻烦了,因为它必须通过我们的部署过程才能上线。
有没有办法在运行时更改附加程序的日志级别,在 Apache 启动之后,而不更改配置文件,然后让该更改影响任何新的 Apache 线程?
【问题讨论】:
标签: perl apache logging mod-perl log4perl
如果您已从 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 docs 的Changing the Log Level on a Logger 部分。
【讨论】:
这对我来说似乎有点 hacky,但它确实有效:
$Log::Log4perl::Logger::APPENDER_BY_NAME{SCREEN}->threshold($DEBUG);
为了使其更具动态性,您可以为 Appender 名称和级别传入一个变量。
%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});
【讨论】: