PHP: последствия внезапного завершения запроса из-за * фатальной * ошибки - PullRequest
2 голосов
/ 31 марта 2011

У меня странная ситуация.

Мое приложение записывает множество журналов трассировки в файл. (Я не знаю точно, как, я использую мой логг фреймворков. Хотя могу проверить это)

Проблема в том, что когда приложение завершается из-за фатальной ошибки (только фатальной) [пример - "Фатальная ошибка: вызов функции-члена someFunction () для необъекта"], я заканчиваю без журналов, даже журналов, которые должны были быть записаны намного раньше во время выполнения моего скрипта.

(Да, я пытался очистить журналы, это тоже не помогает. Похоже, что завершение приложения завершается фатальной ошибкой, что-то отменяет запись в файлы, выполненные в более ранних точках приложения.

Есть идеи, что здесь происходит?

Спасибо

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Фатальная ошибка ... ну ... Фатальная : она останавливает выполнение скрипта, который не будет делать ничего, что должно было быть сделано.


В вашем случае, я предполагаю, что ваша структура ведения журналов регистрируется в памяти - и что этот журнал в памяти записывается в файл только после завершения обработки запроса.
Некоторые механизмы протоколирования делают это, чтобы избежать записи в файл несколько раз, в разные моменты во время генерации ответа (что означает сохранение файла заблокированным, чтобы избежать проблем параллелизма, или открытие-закрытие-открытие-открытие-reclosing -... it)

Когда вы получаете фатальную ошибку, нормальная операция, которая должна быть выполнена в конце генерации ответа, не вызывается - и, таким образом, в памятиlog не записывается в файл.

Теперь, единственный способ узнать наверняка, это взглянуть на механизмы регистрации вашей Framework; -)

0 голосов
/ 31 марта 2011

Очевидно, что фатальная ошибка, о которой говорил Паскаль, не на 100% фатальна.

Ниже приведены мои журналы даже при фатальных ошибках:

function correctShutdown()
{
   logger->flush();
}

register_shutdown_function('correctShutdown');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...