Логирование ошибок в PHP — что реально стоит включать и как это сделать без проблем
Всем кто пишет на PHP, рано или поздно приходится разбираться с логами ошибок. Просто включить display_errors для дебага — дело конечно удобное, но полный бардак для продакшена. Логирование ошибок нужно заводить так, чтобы не светить внутренности сайта пользователям, но при этом иметь подробную информацию о проблемах.
Основное, с чего начинаю сам — выключаю display_errors в php.ini или через ini_set(), потому что хедеры на сайте могут улетать и получать ошибки в браузере — не комильфо. Вместо этого ставлю error_reporting(E_ALL) и включаю логирование с помощью error_log на файл с нормальными правами. Файл с логами должен быть вне веб-директории, чтобы случайно не показался.
Если запускаешь скрипты из разных мест, лучше использовать независимый путь к лог-файлу и аккуратно контролировать размер файла (иначе будет расти без конца). Иногда подключаю Monolog или похожие библиотеки, чтобы сделать логирование более гибким — например, разные уровни ошибок к разным файлам.
Еще важный момент — server error log часто забит разными ошибками от PHP, поэтому полезно для сценариев настроить отдельный лог. И не забывайте про настройки самого веб-сервера (nginx/apache), они тоже влияют.
Короче говоря, стандартная последовательность для безопасного базового логирования — выключаем показ ошибок на экран, записываем все в отдельный лог, проверяем права, следим за размером логов и периодически чистим. Кто как борется с этим? Какие свои приемы используете в проектах?