Как выполнить регистрацию ошибок в CodeIgniter (PHP)
Я хочу регистрировать ошибки в PHP CodeIgniter. Как включить ведение журнала ошибок?
У меня есть несколько вопросов:
- Каковы все шаги для регистрации ошибки?
- Как создается файл журнала ошибок?
- Как вывести сообщение об ошибке в файл журнала (всякий раз, когда возникает ошибка)?
- Как вы отправляете по электронной почте эту ошибку на адрес электронной почты?
Ответы
Ответ 1
В CodeIgniter встроены некоторые функции регистрации ошибок.
- Сделайте свою папку /application/logs доступной для записи
- В /application/config/config.php установите
$config['log_threshold'] = 1;
или используйте большее число, в зависимости от того, сколько деталей вы хотите в своих журналах.
- Используйте
log_message('error', 'Some variable did not contain a value.');
- Чтобы отправить электронное письмо, вам необходимо расширить основной метод класса CI_Exceptions
log_exceptions()
. Вы можете сделать это самостоятельно или использовать this. Подробнее о расширении ядра здесь
См. http://www.codeigniter.com/user_guide/general/errors.html
Ответ 2
Чтобы просто поместить строку в журнал ошибок сервера, используйте функцию PHP error_log(). Однако этот метод не отправит электронное письмо.
Во-первых, чтобы вызвать ошибку:
trigger_error("Error message here", E_USER_ERROR);
По умолчанию это будет отображаться в файле журнала ошибок сервера. См. директива ErrorLog для Apache. Чтобы установить свой собственный файл журнала:
ini_set('error_log', 'path/to/log/file');
Обратите внимание, что файл журнала, который вы выберете, должен уже существовать и быть перезаписываемым процессом сервера. Самый простой способ сделать файл доступным для записи - сделать владельца сервера владельцем файла. (Пользователю сервера может быть никто, _www, apache или что-то еще, в зависимости от вашего дистрибутива ОС.)
Чтобы отправить сообщение по электронной почте, вам необходимо настроить собственный обработчик ошибок:
function mail_error($errno, $errstr, $errfile, $errline) {
$message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
error_log($message); // writes the error to the log file
mail('[email protected]', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);
Дополнительную информацию см. в соответствующей документации PHP.
Ответ 3
Также убедитесь, что вы разрешили codeigniter регистрировать тип сообщений, которые вы хотите в файле конфигурации.
i.e $config['log_threshold'] = [log_level ranges 0-4];
Ответ 4
Больше о чем касается вопроса 4. Как вы отправляете эту ошибку по электронной почте на адрес электронной почты?
Функция error_log также имеет адрес электронной почты.
http://php.net/manual/en/function.error-log.php
Ага, здесь я нашел пример, показывающий использование.
Отправить сообщение об ошибке по электронной почте с помощью error_log()
error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);