如果您检查创建的Logger
对象(在使用 初始化它之后Logger::getLogger("test");
),您会看到它已经有一个父 Logger object(LoggerRoot)
,. 该对象的级别设置为DEBUG
,这实际上是打印debug
和info
消息的记录器。
一种可能的方法是使用 RootLogger 代替:
$logger = Logger::getRootLogger();
$logger->setLevel(LoggerLevel::getLevelWarn());
$logger->debug("debug");
$logger->info("info");
$logger->warn("warn");
另一种方法是配置 rootLogger 以便它只记录一些非常高级别 ( FATAL
) 的消息,并让您的记录器设置适合它们的级别。但是在这种情况下,您需要将自己的附加程序添加到那些(执行日志记录工作的是附加程序;记录器只是管理它们)。同样,一种可能的方法:
$rootLogger = Logger::getRootLogger();
$rootLogger->setLevel(LoggerLevel::getLevelFatal());
$logger = Logger::getLogger('some');
$logger->addAppender($rootLogger->getAppender('default'));
$logger->setLevel(LoggerLevel::getLevelInfo());
$logger->debug('debug'); // won't print
$logger->info('info'); // will be printed
$logger->warn('warn'); // will be printed too
$logger->fatal('fatal dup'); // will be printed TWICE:
// with $logger, then with $rootLogger
$logger->setAdditivity(false); // switching off log event propagation
$logger->fatal('fatal once'); // will be printed ONCE
但如果您实际上需要一个复杂的记录器层次结构,我强烈建议您按照log4php 文档本节中描述的方法一次配置它们。