Я использую Monolog в ванильном PHP-приложении.
Я хотел бы регистрировать ошибки только определенного уровня — INFO и не выше, так как у меня есть другие обработчики для этого.
Вот мой код:
<?php
$logger = new Logger('mylogger');
$logger->pushHandler(new StreamHandler(__DIR__.'/log/errors.log', Logger::WARNING));
$logger->pushHandler(new StreamHandler(__DIR__.'/log/info.log', Logger::INFO));
Есть ли способ записать только информационные сообщения в info.log
?
У меня была та же проблема сегодня, которая привела меня сюда. Во всяком случае, я решил это с помощью монологов FilterHandler.
FilterHandler позволяет передавать в качестве аргумента другой обработчик, а затем указывать минимальный и максимальный уровни ведения журнала, которые будут запускать этот обработчик.
Есть несколько других обработчиков это может быть полезно в определенных ситуациях.
// Create the logging instance
$logger = new \Monolog\Logger('myLogger');
// Create error stream handler for error events and higher
$errorStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/error.log',
\Monolog\Logger::ERROR);
// Create info stream handler for info events and higher
$infoStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/Info.log',
\Monolog\Logger::INFO);
// Create filter handler to make sure info stream only logs info events
// Pass in the info handler
// Debug is the minimum level this handler will handle
// Info is the maximum level this handler will handle
$infoFilterHandler = new \Monolog\Handler\FilterHandler(
$infoStreamHandler,
\Monolog\Logger::DEBUG,
\Monolog\Logger::INFO);
// Add the handlers to logger
$logger->pushHandler($errorStreamHandler);
$logger->pushHandler($infoFilterHandler);
// Yay no errors in Info.log
$logger->addError("Some Error");
$logger->addInfo("Some Info");
Обновить Али
Обратитесь к исходный код из \ Monolog \ Logger, чтобы посмотреть, какие константы доступны, затем назначьте константу переменной.
$someVar = \Monolog\Logger::INFO;
$infoStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/Info.log',
$someVar);
установить для параметра buubble значение false
$ logger-> pushHandler (новый StreamHandler (DIR.’/log/info.log’, Logger :: INFO, false));