Dec 19 2008

Symfony: отлавливаем фатальные ошибки

Category: Symfony,Отладкаingvar @ 10:57

При разработке приложения на Symfony бывают ситуации, когда на странице получаем «белый экран» без описания ошибок, и в логах тоже пусто. Это так называемые «фатальные ошибки», которые можно отловить, но для этого надо задействовать перехватчик ошибок.

Без плагинов можно сделать следующее.

Способ №1: используем перехватчик ошибок
Листинг 1: Добавляем в файлы index.php и frontend_dev.php

error_reporting(E_ALL);
ini_set('log_errors', 'On');
ini_set('display_errors', 'Off');
ini_set('error_log', '../logs/fatal_server.log');

Способ №2: воспользоваться плагинами Symfony
sfErrorHandlerPlugin

Tags:

8 Responses to “Symfony: отлавливаем фатальные ошибки”

  1. Vit228 says:

    Спасибо, в копилку :)
    Я до сих пор использовал настройку в .htaccess
    php_flag display_errors on
    php_value error_reporting 2047

    Но это не кошерно, т.к. включает ошибки и для frontend

  2. ingvar says:

    Вообще рекомендую указать в настройках php.ini параметр
    error_log = «/home/fatal_error.log», т.к. иногда забываешь прописать, а где-то не указаны обработчики. Таким образом можно обработать все сайты и скрипты.

  3. solenko says:

    @Ingvar, нудобно это. Потом разбиратся что от какого хоста пришло…
    При log_errors все эти ошибки попадают в error_log апача, который настраивается для виртуального хоста.

    • ingvar says:

      2solenko: отнюдь. Если использовать первый вариант, то ошибки сохраняются в отдельный файл для данного сайта, в общий список не попадают. К тому же чаще это надо для разработки локально. Мне это только помогает :)

  4. solenko says:

    @ingvar, вы устанавливаете настройку в php.ini, т.е. она повлияет на все хосты с PHP. Каким образом это соотносится с
    «то ошибки сохраняются в отдельный файл для данного сайта, в общий список не попадают. «?

    «К тому же чаще это надо для разработки локально. »
    А какая разница? Или вы на локальном компе не поднимаете virtual host? Или у вас в работе в каждый момент времени только один проект?

    • ingvar says:

      2solenko. Использую virtual host. Согласен, что если сыпеться все общий файл, то разобрать неудобно. Поэтому переназначаю для текущего проекта в папку logs. И прописываю в php.ini. Почему? Иногда, где-то провтыкаешь, где-то не будет обработчика, а так видно, что была проблема. Мне лично это помогает.

  5. solenko says:

    lngvar, я не могу понять как вы в php.ini прописываете спецефические для хоста настройки. Возможно я просто чего-то не знаю. Или у вас отдельный php.ini для каждого хоста?

    • ingvar says:

      2solenko. Рассказываю еще раз, а то мы не поняли друг друга :).

      1) В php.ini я указываю параметр error_log = “/home/fatal_all_error.log”. Да, это глобальная настройка, для всех хостов. Если будут возникать проблемы, то все будет сыпаться в общий файл fatal_all_error.log. Иногда это помогает. Почему? Часто ошибка содержить полный путь к скрипту, где возникла эта самая ошибка.

      2) Ранее я писал на CodeIgniter, теперь на Symfony, но принцип тот же. Я для Симфони в файл web/index.php вставляю в самый вверх кусок кода:

      error_reporting(E_ALL);
      ini_set('log_errors', 'On');
      ini_set('display_errors', 'Off');
      ini_set('error_log', '../logs/fatal_server.log');

      Папка logs — это папка для конкретного сайта, куда складываются логи от Апача: access, error.

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

Leave a Reply