Как читать логи сайта и быстрее находить причину ошибки
В поддержке сайта логи помогают не спорить с симптомами. Пользователь говорит “форма не работает”, менеджер видит “заявка не пришла”, а в логе может быть конкретная строка: SMTP refused connection, validation failed, permission denied или missing column. Чем быстрее найдено точное сообщение, тем меньше случайных правок.
Где искать логи
У PHP-проекта обычно несколько уровней логов. Один лог редко отвечает на все вопросы, поэтому полезно проверять их в связке.
- лог приложения: ошибки Yii2, исключения, пользовательские категории;
- лог nginx или Apache: ошибки веб-сервера, проблемы с FastCGI;
- лог PHP-FPM: падения процессов, превышение лимитов;
- почтовый лог: отправка и отклонение писем;
- логи cron и очередей: фоновые команды.
tail -n 100 runtime/logs/app.log
tail -n 100 /var/log/nginx/error.log
tail -n 100 /var/log/php-fpm/error.log
На хостингах пути отличаются. Иногда error log лежит рядом с public_html, иногда доступен только через панель.
Смотреть лог во время повторения ошибки
Самый удобный способ — открыть лог в режиме ожидания и повторить действие на сайте. Так можно не искать нужную запись среди старых сообщений.
tail -f runtime/logs/app.log
После этого повторяют проблемный сценарий: отправляют форму, открывают страницу, запускают импорт, сохраняют карточку в админке. Если в лог сразу добавилась ошибка, дальше работа становится предметной.
Отделить свежую ошибку от старого шума
Старые проекты часто годами пишут предупреждения в лог. Не каждое сообщение связано с текущей проблемой. Нужно смотреть время, URL, пользователя, категорию и повторяемость.
grep "2026-06-18" runtime/logs/app.log
grep "contact-form" runtime/logs/app.log
grep "Exception" runtime/logs/app.log
Если ошибка повторяется каждую минуту, возможно, её создаёт cron. Если появляется только при отправке формы, нужно смотреть обработчик формы и почту.
Что фиксировать при ошибке
Чтобы потом не возвращаться к той же диагностике, полезно сразу фиксировать минимум данных:
- точное время ошибки;
- URL или команда, где она возникла;
- текст исключения;
- файл и строка;
- последнее изменение кода или настроек;
- воспроизводится ли ошибка повторно.
Для Yii2 исключение обычно содержит stack trace. В нём важно найти не только строку во фреймворке, но и первый файл проекта, где началась проблема.
Логирование в Yii2
Для диагностики удобно использовать категории. Они помогают быстро отфильтровать сообщения по конкретной задаче.
Yii::info([
'email' => $model->email,
'phone' => $model->phone,
], 'contact-form');
Yii::error($e->getMessage(), 'contact-form');
В рабочем проекте нельзя бездумно писать в лог персональные данные, токены, пароли и полные номера карт. Для диагностики обычно достаточно ID сущности, статуса, категории и короткого сообщения.
Когда лог пустой
Если ошибка есть, а лог приложения пустой, возможны несколько вариантов:
- приложение не успевает запуститься;
- не настроен target логирования;
- нет прав на запись в runtime/logs;
- ошибка возникает на уровне nginx или PHP-FPM;
- проверяется не тот сервер или не тот домен.
ls -la runtime/logs
touch runtime/logs/test.log
Если файл не создаётся, сначала нужно исправить права. Пока приложение не может писать лог, диагностика будет слепой.
Ротация логов
Огромный app.log на несколько гигабайт — отдельная проблема. Его трудно читать, копировать и архивировать. В Yii2 можно настроить размер и количество файлов.
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
'maxFileSize' => 10240,
'maxLogFiles' => 10,
],
],
],
Для серверных логов обычно используется logrotate. Проверять его стоит, если диск неожиданно заполняется логами.
Связь логов с обращением пользователя
Когда пользователь сообщает об ошибке, полезно уточнить не “что нажимали вообще”, а конкретику: время, страницу, действие, введённые данные без лишней персональной информации. Тогда запись в логе ищется быстрее.
- Уточнить примерное время ошибки.
- Открыть лог приложения за этот период.
- Проверить веб-сервер на тот же момент.
- Повторить действие на тестовых данных.
- Сравнить новую запись в логе со старой.
Логи не заменяют понимание кода, но сильно сокращают путь к причине. Хорошая привычка при поддержке — сначала читать свежие сообщения, потом менять код. В обратном порядке легко исправить не ту проблему.
Комментарии (0)
Пока нет комментариев. Будьте первым!