Журнал и страницы ошибок
Журнал — файл, в который сайт записывает, что с ним происходило: ошибки, предупреждения, важные события. На рабочем сервере посетитель видит только общую страницу ошибки, а подробности разработчик читает в журнале. Файлы журнала лежат в папке writable/logs, шаблоны страниц ошибок — в app/Views/errors/html.
Запись в журнал
// app/Controllers/Home.php
public function index(): string
{
log_message('error', 'Проверка журнала');
return 'Запись добавлена';
}Откройте главную страницу, затем папку writable/logs: в файле с сегодняшней датой, например log-2026-03-02.log, появится строка с уровнем ERROR, временем и текстом. На каждый день создаётся свой файл.
Уровни
Первый аргумент log_message() — уровень важности:
| Номер | Уровень | Когда использовать |
|---|---|---|
| 1 | emergency | Сайт не работает |
| 2 | alert | Нужно срочное вмешательство |
| 3 | critical | Отказала важная часть |
| 4 | error | Ошибка в одном запросе |
| 5 | warning | Что-то подозрительное |
| 6 | notice | Заметное, но нормальное событие |
| 7 | info | Обычные события: вход, заказ |
| 8 | debug | Подробности для отладки |
Данные в сообщении
Значения подставляют на место меток в фигурных скобках:
log_message('info', 'Статья {id} опубликована пользователем {user}', [
'id' => $post['id'],
'user' => session('user_id'),
]);В журнале окажется строка вида «Статья 5 опубликована пользователем 1».
Порог записи
Какие уровни попадают в файл, задаёт свойство $threshold в app/Config/Logger.php:
// app/Config/Logger.php
public $threshold = (ENVIRONMENT === 'production') ? 4 : 9;Число 4 означает «записывать уровни от 1 до 4», то есть ошибки и всё, что серьёзнее. Поэтому на рабочем сервере сообщения info и debug в журнал не попадают, пока порог не повышен.
Страницы ошибок
Когда происходит ошибка, CodeIgniter сам записывает её в журнал и выводит один из шаблонов папки app/Views/errors/html:
| Файл | Когда показывается |
|---|---|
error_404.php | Страница не найдена |
error_exception.php | Любая ошибка в режиме development: текст, файл, строка |
production.php | Любая ошибка в режиме production: общая фраза без подробностей |
Эти файлы — обычные шаблоны. Откройте error_404.php и замените разметку своей:
<!-- app/Views/errors/html/error_404.php -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Страница не найдена</title>
</head>
<body>
<h1>Такой страницы нет</h1>
<p><a href="/">Вернуться на главную</a></p>
</body>
</html>Откройте несуществующий адрес, например /nothing, — появится ваша страница. Её же увидит посетитель, когда контроллер бросает PageNotFoundException.
Панель отладки
В режиме development внизу каждой страницы есть панель отладки. В ней видны запросы к базе, время работы, подключённые шаблоны и записи журнала текущего запроса — заглядывать в файл не обязательно.
Частая ошибка
Папка writable должна быть доступна веб-серверу для записи. Если прав нет, журнал не создаётся, и об ошибках на сервере никто не узнаёт. После переноса проекта откройте writable/logs и убедитесь, что там появляются файлы. Сама папка не должна быть доступна из браузера — в журнале встречаются адреса и данные запросов.