Подтвердить что ты не робот

PHP - log stacktrace для предупреждений?

Можно ли записывать стоп файлы для php-предупреждений? Или уловить предупреждение и error_log() it?

Там какой-то код вызывает предупреждения в моем журнале ошибок, но невозможно узнать, что вызывает эти предупреждения, не зная трассировку стека.

4b9b3361

Ответ 1

Есть пример использования set_error_handler() в сочетании с ErrorException чтобы сделать именно это:

https://php.net/manual/en/class.errorexception.php

Вам просто нужно реализовать свои пользовательские функции регистрации внутри функции обработчика.


ОБНОВИТЬ:

Обратите внимание, это также работает для предупреждений и многих других типов ошибок. Для полной совместимости см. Руководство для set_error_handler():

https://php.net/set_error_handler

Ответ 2

Просто бросьте это в начале вашего script:

set_error_handler(function($severity, $message, $file, $line) {
    if (error_reporting() & $severity) {
        throw new ErrorException($message, 0, $severity, $file, $line);
    }
});

Удалите if, который вы хотите записать все, даже если оно было подавлено.

Ответ 3

Я верю, что xdebug пойдет в журнал, если это будет возможно в вашем файле php.ini, но у него есть трассировка стека (с некоторыми бонусами, такими как отображение локальных переменных). Однако это не рекомендуется для производственной среды.

Трассировка стека XDebug