Просто начал использовать Монолог для регистрации ошибок в моем PHP-проекте, но я хочу установить минимальную установку отчетов об ошибках в УВЕДОМЛЕНИЕ и выше. Код Im, использующий прямо сейчас
use Monolog\ErrorHandler; $handler = new ErrorHandler($logger); $handler->registerErrorHandler([], false); $handler->registerExceptionHandler(); $handler->registerFatalHandler();
Который генерирует все ошибки, включая УВЕДОМЛЕНИЯ. Как установить равный
error_reporting (E_ALL & ~ E_NOTICE);
используя Монолог
ErrorHandler
поймает все уровни trigger_error
если вы не забудете их, используя оператор @
или фактически установив error_reporting с помощью error_reporting(E_ALL & ~E_NOTICE);
Если по какой-то причине вы хотите сохранить отчет об ошибках, но в то же время отфильтруйте, какая из этих ошибок улавливается обработчиком ошибок monolog, я бы пошел с расширением обработчика ошибок и зарегистрировав это вместо этого. Что-то вроде этого:
class MyErrorHandler extends Monolog\ErrorHandler{ public function handleError($code, $message, $file = '', $line = 0, $context = []) { if($code === E_NOTICE){ return; } parent::handleError($code, $message, $file, $line, $context); } } use MyErrorHandler as ErrorHandler; $handler = new ErrorHandler($logger); $handler->registerErrorHandler([], false); $handler->registerExceptionHandler(); $handler->registerFatalHandler();
Обратите внимание, что я на самом деле не проверял это, но я не нашел причин, по которым он не будет работать
Уровни регистрации монолога не связаны с уровнями ведения журнала PHP. Уровни ведения журнала PHP, заданные error_reporting()
управляют тем, что сам PHP-сервер сообщает в своем собственном выпуске. Уровни регистрации монолога эмулируют уровни syslog unix и предназначены для управления приложениями, а не PHP. Т.е. error_reporting()
обрабатывает сообщения, сгенерированные PHP, а Monolog обрабатывает сообщения, созданные вашим приложением. Например, в вашем приложении при выдаче журнала вы указываете его серьезность:
if ($some_not_important_condition) { $logger->info('foo'); } if ($some_important_condition) { $logger->error('bar'); }
Таким образом, ваше приложение всегда создает записи журнала уровня info
наполнения, и до конфигурации времени выполнения можно решить, какие из них и как они идут. Например, вы можете печатать на экране в процессе разработки или регистрироваться в Nagios на производстве.