PHP - журнал трассировки стека для предупреждений? - PullRequest
17 голосов
/ 21 июня 2011

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

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

Ответы [ 3 ]

13 голосов
/ 21 июня 2011

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

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

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


UPDATE:

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

https://php.net/set_error_handler

4 голосов
/ 15 июня 2016

Просто добавьте это в начало вашего скрипта:

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

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

1 голос
/ 21 июня 2011

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

Следы стека XDebug

...