Уровень вывода ошибок при разработке проектов

Apostol

Новичок
Всем привет, интересно, кто какие значения для ошибок выставляет, достаточно ли e_all или e_strict?
 

ScDewt

Новичок
При разработке, как своих проектов, так и на работе - вывод всех ошибок, с максимальным логированием работы скриптов. Логи автоматически парсятся и показывают неполадки в работе пакетов.
На продакшене - вывод ошибок запрещен по максимуму.

p.s. разработка должна отображать все ошибки - так получается писать код более надежно и правильно.
 

ScDewt

Новичок
Имеются в виду php тесты?
Не совсем.

php-тесты существуют отдельно от кода и обработки ошибок.

Есть собственные большие php-пакеты, все важные пакеты имеют свой лог, точнее каждый пакет умеет сам себя логировать. Некоторые пакеты даже имеют уровни логирования.
Логирование заключается в виде записи всех Exception + описание какой метод с каким параметрами вызван (грубо говоря бэктрейс) + некоторые промежуточные расчеты и т.п..

Когда разработан код - запускаются тесты, если тесты проходят - то все хорошо (иногда визуально смотрятся логи на предмет упущенных ошибок). Если нет и тест упал - то тут открываются логи, запускается дебагер.

Логи полезны тем, что есть нестабильный код/тесты и дебагером не всегда можно отловить глюк, который вылетает раз в 10 запусков. Вот тут и нужны логи - чтоб увидеть где начинает и куда передается фуфло.

Так же парсятся логи самого php - смотрим что где юзается неправильно. К примеру всякие undefined index и тому подобное.

p.s. а вот на продакшене чтобы не травмировать психику пользователя бэктрейсами и прочей фигней - в случае ошибки выводим html-заглушку. Но логирование на продакшене тоже используем, потому что сами пользователи не всегда признаются где косячат.
 

Фанат

oncle terrible
Команда форума
ScDewt
Ну что ж вы всегда путаете по-нубски вывод и уровень
Вопрос был про уровень ошибок. Зачем вообще было приплетать сюда вывод? Что значит "по максимуму"? Как может быть максимальным булево значение - или запрещать или нет? "По максимуму беременна".
 

Фанат

oncle terrible
Команда форума

ScDewt

Новичок
ScDewt
Ну что ж вы всегда путаете по-нубски вывод и уровень
Вопрос был про уровень ошибок. Зачем вообще было приплетать сюда вывод?
Читать умеем? Или только говорить? Если умеем - то читаем название темы "Уровень-вывода-ошибок-при-разработке-проектов".

Что значит "по максимуму"? Как может быть максимальным булево значение - или запрещать или нет? "По максимуму беременна".
Это значит:
E_ERROR - Фатальные ошибки времени выполнения
E_WARNING - Предупреждения времени выполнения (нефатальные ошибки).
E_PARSE - Ошибки на этапе компиляции.
если дальше интересно - читаем: http://www.php.net/manual/ru/errorfunc.constants.php
т.е. по максимуму - значит все.

Про булево - вообще не понял о чем Вы.

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

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Скрывать ничего не надо, надо писать в логи, вместо вывода на экран...
 

Фанат

oncle terrible
Команда форума
Не стоит хамить, если не различаешь элементарных вещей.
Объясняю на пальцах, один раз. Если захочется ответить, то рекомендую сначала подумать, потом перечитать свои же сообщения в теме, потом ещё подумать, и только потом писать.

1. Вывод на экран - это булев параметр. Либо выводим, либо нет. На девелопере - по желанию, на продакшене всегда отключен. К уровню ошибок не имеет ни малейшего отношения. "запрещен по максимуму" - бессмыслица. Булево значение не имеет качественных градаций.
2. Уровень репортинга - это совсем другое. Класс ошибок, о которых сообщает РНР. Должен быть всегда максимальным, вне зависимости от роли сервера. "на продакшене запрещен по максимуму" - вредительство.

В итоге ты запутался в этих двух соснах, и начал сам себе противоречить. Если "на продакшене вывод ошибок запрещен по максимуму, (т.е. - все) ", то откуда там же в логах возьмутся "всякие undefined index и тому подобное"? (вопрос риторический, отвечать на него не нужно)
 

ScDewt

Новичок
Фанат, спасибо за разъяснение, действительно запутался в словах.
Попробую исправиться - на продакшене вывод ошибок на экран запрещен везде, уровень репортинга в php немного урезан, потому что логи серверов распухают от notice - но это частный случай большого и древнего кода, а в общем правиле правильней как указали Вы - логировать все.
 

Фанат

oncle terrible
Команда форума
я, кстати, про логирование ничего не говорил (я это подразумевал =) но, разумеется, согласен, что логировать надо всегда - особенно, если используется описанный выше интеллектуальный обработчик, сообщающий дополнительную отладочную информацию.

А с терминами в русском и правда беда. В отличие от английского, в котором используются разные слова display и reporting, в русском прижилось двусмысленное "вывод", и в смысле на экран и в смысле вывод "вообще", сами сообщения об ошибках вне зависимости от устройства вывода.
Впрочем, англичане и сами подкачали. Настройка должна называться error_reporting_level поскольку без последнего слова тоже служит причиной путаницы.
но это частный случай большого и древнего кода
...который в данной теме - оффтопик, поскольку вопрос был про разработку ;-)
И вот чтобы потом на продакшене не пришлось глушить ошибки - при разработке надо выводить (и исправлять) все. Автора топика это в первую очередь касается.
 

ScDewt

Новичок
не пробовали их исправить? заодно заработает какая-нибудь функциональность, про которую раньше и не знали)
По-тихоньку исправляем. Собственно обо всех ошибках мы знаем - они есть и на серверах разработки. Просто кода много, очень много, код старый, недокументированный, сложный и на куче серверов (несколько сотен) - потому исправить быстро нереально. Тем более теже notice орут на каждую мелочь. А логи на серверах в виду большой нагрузки - пухнут как на дрожжах, потому и урезаны. Большей частью нам важны логи пакетов ибо там деньги крутятся.
 

Фанат

oncle terrible
Команда форума
Beavis
Legacy code такой legacy code.
Ты бы лучше свое замечание автору топика адресовал. А то ему, как тому танцору, нотисы мешают.
 

Фанат

oncle terrible
Команда форума
Ну, я имел в виду вот это:
там e_all указан, которые пропускает notice ошибки...важно ли это?
нотисы не менее важны, яем другие сообщения об ошибках.

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

флоппик

promotor fidei
Команда форума
Партнер клуба
А с терминами в русском и правда беда. В отличие от английского, в котором используются разные слова display и reporting, в русском прижилось двусмысленное "вывод"
В русском есть и «журналирование ошибок», и «уровень предупреждений об ошибках» и «отображение ошибок». Термины не виноваты, что вы их не пользуете :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну, я имел в виду вот это:

нотисы не менее важны, яем другие сообщения об ошибках.

программист должен всегда знать, откуда взялась та или иная переменная а не надеяться на авось.
Вот о случаях, когда к переменной обращение есть, а самой её нет - нотисы и сигнализируют.
В пхп 5.4 есть вошлебное значение error_reporting = -1 — правильный E_ALL
 
Сверху