Логирование ошибок в CodeIgniter: отключаем вывод ошибок пользователю и записываем ошибки в лог-файл
Во время отладки и настройки полезно видеть ошибки, которые выдает фреймворк CodeIgniter на экране. Но в готовых проектах лучше отключить вывод ошибок на экран и настроить запись ошибок в лог-файл. Несколько несложных действий помогут это реализовать.
Реализуем в фреймворке CodeIgniter отключение вывода ошибок на экран и настраиваем их запись в лог-файл. Также внесём в системе CI необходимые изменения, чтобы не показывались SQL-ошибки, но чтобы они логировались.
Хороший тон - в рабочем коде убирать вывод ошибок пользователю и перенаправлять его в лог-файл.
В CodeIgniter для этого необходимо установить следующие настройки:
1. Файл index.php
error_reporting(0);
2. Файл application/config/config.php
/**
0 = отключает логирование
1 = записывает только сообщения с ошибками
2 = добавляются отладочные сообщения
3 = добавляются информационные сообщения
4 = добавляются все оообщения
**/
$config['log_threshold'] = 1;
/**
По умолчанию логи сохраняются в папку system/logs/
Либо, указывается свой путь к папке для лог-файлов.
Необходимо проверить права доступа у папки на запись
**/
$config['log_path'] = '';
3. Файл application/config/database.php
/**
TRUE - ошибки базы данных отображаются
FALSE - ошибки базы данных не отображаются
**/
$db['default']['db_debug'] = FALSE;
После всех этих настроек ошибки перестанут отображаться пользователю и будут записываться в лог-файлы. Все ошибки, кроме ошибок базы данных (SQL запросы)! Т.е. настройка $db['default']['db_debug'] = FALSE;
отвечает как за отображение, так и за запись в лог. Если TRUE – ошибка показывается пользователю и записывается в лог. FALSE – ни пользователю, ни в лог.
Или это ошибка, или такая задумка разработчиков CI, но явно неудобный момент.
Его и исправим
Открываем файл /system/database/DB_driver.php и ищем конструкции такого типа:
if ($this->db_debug)
{
log_message('error', 'Invalid query: '.$sql);
return $this->display_error('db_invalid_query');
}
И исправляем на такую:
log_message('error', 'Invalid query: '.$sql);
if ($this->db_debug)
{
return $this->display_error('db_invalid_query');
}
Т.е. просто выносим вызов функции log_message из условия if.
Возможно, придется проделать немного больше правок, но суть понятна.
Например, в функции query выносим из проверочного условия
log_message('error', 'Query error: '.$error_msg);
Значит, нужно вынести и $error_msg = $this->_error_message(); чтобы $error_msg была определена.
$error_msg = $this->_error_message();
log_message('error', 'Query error: '.$error_msg);
Записываемые сообщения об ошибках БД не очень информативны, поэтому удобно добавлять и сам текст sql-запроса, в котором произошла ошибка.
log_message('error', 'Query error: '.$error_msg.' '.$sql);
Дальше следите за логами в папке system/logs и работайте над ошибками.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- Как правильно обновить ExpressionEngine до последней версии 2.5.5 (05.02.2013)
- Team Sense: Доступна отправка сообщения/письма на email сотрудника. (18.01.2013)
- TeamSense: username (логин) в регистрации пользователя. Внедрили библиотеку DHTMLX в TeamSense. (11.01.2013)
- Team Sense: В календарь добавлена возможность указывать место проведения уроков (в офисе, на выезде) (12.12.2012)
- Team Sense: Многопользовательский календарь, заменяем радиокнопки на чекбоксы в выборе преподавателей. Массивы в Javascript. (06.12.2012)
- Team Sense: В календарь-расписание уроков добавлено разделение по преподавателям, которым присвоены свои цвета. (04.12.2012)
- CodeIgniter не передаёт $this->uri->segment(3) в функцию контроллера (передача переменной PHP->JavaScript->PHP) (28.11.2012)
- Воюем с форматом даты в JavaScript. Приведение формата даты в поле input в календаре системы TeamSense к более красивому виду. (18.11.2012)
- Team Sense: Теперь Email-оповещения в TODO можно отправлять как для руководителя задачи, так и для помощников. (21.09.2012)
- CodeIgniter и TeamSense: Делаем свой вид для страницы с ошибкой 404, настраиваем правильную отдачу статусов в HTTP headers (12.09.2012)
- Установка другого сайта (на CodeIgniter или Yii) в подпапку и чтобы поддомен ссылался на подпапку (25.08.2015)
- CodeIgniter: Подключение JS и CSS файлов там, где это нужно. (26.06.2012)
- Использование DISTINCT в SQL-запросах для исключения повторяющихся данных применительно к фреймворку CodeIgniter. (18.06.2012)
- CodeIgniter выдаёт ошибку: Cannot modify header information - headers already sent by (13.04.2012)
- CodeIgniter: Передаются пустые значения полей формы через $_POST если вводить русские символы. Форма не проходит валидацию. (17.08.2016)
- Обновление CodeIgniter с версии 2.0 (2.0.0) до версии 2.0.1 (23.01.2012)
- CodeIgniter: Показываем сообщения пользователю на его действия (19.11.2011)
- Настройка локальной и рабочей сред для разработки на CodeIgniter (2-й вариант) (22.01.2012)
- Календарь c несколькими событиями в один день на CodeIgniter (Calendar Multiple Events Per Day) (23.10.2011)
- Настройка локальной среды для разработки на CodeIgniter в Mac OSX, используя MAMP (22.01.2012)
- Обновление CodeIgniter с версии 2.0.1 до 2.0.2 (23.10.2011)
- CodeIgniter: Аутентификация на сайте с помощью библиотеки DX Auth (24.08.2011)
- Сравнение Yii с CodeIgniter (23.10.2011)
- CodeIgniter: Рассылка email по выбранным группам зарегистрированных пользователей и списку незарегистрированных пользователей (02.03.2013)
1 комментарий