8

我有一个在 mod_perl 下运行的 Mason 模板,它使用 Log::Log4perl。

我想更改特定附加程序的日志级别,但是更改配置太尴尬了,因为它必须通过我们的部署过程才能上线。

有没有办法在运行时更改附加程序的日志级别,在 Apache 启动之后,而不更改配置文件,然后让该更改影响任何新的 Apache 线程?

4

2 回答 2

11

如果您已从 导入日志级别常量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

于 2011-05-10T16:12:13.727 回答
2

对我来说这似乎有点 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});
于 2014-04-28T15:35:47.923 回答