Si vous cochez l'objet créé Logger
(après l'initialisation avec Logger::getLogger("test");
), vous verrez qu'il a déjà un enregistreur de parent, object(LoggerRoot)
. Cet objet a son niveau défini sur DEBUG
, et c'est en fait l'enregistreur qui imprime les messages debug
et info
.
Une approche possible est d'utiliser un RootLogger à la place:
$logger = Logger::getRootLogger();
$logger->setLevel(LoggerLevel::getLevelWarn());
$logger->debug("debug");
$logger->info("info");
$logger->warn("warn");
Une autre approche consiste à configurer rootLogger afin qu'il enregistre uniquement les messages de certains très haut niveau (FATAL
), et laissez vos enregistreurs pour définir les niveaux approprié pour eux. Mais dans ce cas, vous devez ajouter vos propres appenders à ceux-ci (c'est les appenders qui font le travail de journalisation, les loggers les gèrent simplement). Encore une fois, une approche possible:
$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
Mais vous avez réellement besoin d'une hiérarchie complexe de bûcherons, je serais suggère fortement de les configurer à la fois, suivant la méthode décrite dans this section de la documentation log4php.
désolé, j'aurais dû être plus précis. Je veux que cela se passe sur stdout, mon souci est qu'il ignore la requête setLevel() et l'impression de la journalisation de niveau debug() et info() même si le niveau est défini sur Warn. – user645402