Как вести журнал ошибок в CodeIgniter (PHP)


94

Мне нужен журнал ошибок в PHP CodeIgniter. Как включить ведение журнала ошибок?

У меня есть несколько вопросов:

  1. Каковы все шаги для регистрации ошибки?
  2. Как создается файл журнала ошибок?
  3. Как поместить сообщение об ошибке в файл журнала (при возникновении ошибки)?
  4. Как отправить эту ошибку по электронной почте?

Ответы:


182

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(). Вы можете сделать это сами или использовать это . Подробнее о расширении ядра здесь

См. Http://www.codeigniter.com/user_guide/general/errors.html


Есть ли какие-либо последствия для безопасности?
Аакил Фернандес,

Это сбрасывает данные в файл php, имя файла которого имеет формат: log- [Ymd H: i: s] или любое другое значение, установленное в конфигурации ключа log_date_format, определенной в вашем файле конфигурации. До тех пор, пока вы не можете записывать / выгружать конфиденциальные данные, это должно быть довольно безопасно. Этот файл по умолчанию относится к странице index.html, поэтому явно сгенерированные файлы php не будут общедоступными, но вы никогда не узнаете. Обязательно соблюдайте все эти меры предосторожности, если вы измените каталог приложений / журналов по умолчанию.
Винсент Эдвард Гедария Бинуа

7
Сделайте вашу папку / application / logs доступной для записи <<< мне помогло
Сергей Гречин

1
Когда я установил «$ config ['log_threshold'] = 1;», я не получил никаких журналов в моей папке / application / logs. Однако, когда я установил «$ config ['log_threshold'] = 3», появился файл журнала. Надеюсь это поможет. Спасибо! Мир.
masarapmabuhay

25

Чтобы просто поместить строку в журнал ошибок сервера, используйте функцию 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('you@yourdomain.com', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

Дополнительную информацию см. В соответствующей документации PHP .


3

Также убедитесь, что вы разрешили codeigniter регистрировать сообщения нужного вам типа в файле конфигурации.

т.е. $config['log_threshold'] = [log_level ranges 0-4];


1

Подробнее о части вопроса 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);

0
In config.php add or edit the following lines to this:
------------------------------------------------------
$config['log_threshold'] = 4; // (1/2/3)
$config['log_path'] = '/home/path/to/application/logs/';

Run this command in the terminal:
----------------------------------
sudo chmod -R 777 /home/path/to/application/logs/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.