Cómo hacer el registro de errores en CodeIgniter (PHP)

92

Quiero el registro de errores en PHP CodeIgniter. ¿Cómo habilito el registro de errores?

Tengo algunas preguntas:

  1. ¿Cuáles son todos los pasos para registrar un error?
  2. ¿Cómo se crea un archivo de registro de errores?
  3. ¿Cómo enviar el mensaje de error al archivo de registro (siempre que se produzca un error)?
  4. ¿Cómo se envía ese error a una dirección de correo electrónico?
udaya
fuente

Respuestas:

180

CodeIgniter tiene algunas funciones de registro de errores integradas.

  • Haga que su carpeta / application / logs se pueda escribir
  • En /application/config/config.php configure
    $config['log_threshold'] = 1;
    o use un número más alto, dependiendo de la cantidad de detalles que desee en sus registros
  • Utilizar log_message('error', 'Some variable did not contain a value.');
  • Para enviar un correo electrónico, debe ampliar el método de clase principal CI_Exceptions log_exceptions(). Puede hacer esto usted mismo o usar esto . Más información sobre cómo extender el núcleo aquí

Ver http://www.codeigniter.com/user_guide/general/errors.html

Keyo
fuente
¿Hay implicaciones de seguridad para esto?
Aakil Fernandes
Esto vuelca los datos a un archivo php cuyo nombre de archivo tiene el formato: log- [Ymd H: i: s] o cualquier valor que se establezca en la configuración de clave log_date_format definida en su archivo de configuración. Mientras no pueda registrar / volcar datos confidenciales, debería ser bastante seguro. Este archivo es relativo a una página index.html de forma predeterminada, por lo que obviamente los archivos php generados no serían de acceso público, pero nunca lo sabrás. Asegúrese de tener todas estas precauciones en su lugar si cambia el directorio de aplicaciones / registros predeterminado.
Vincent Edward Gedaria Binua
7
Haga que su carpeta / application / logs se
pueda
1
Cuando configuré "$ config ['log_threshold'] = 1;", no obtuve ningún registro en mi carpeta / application / logs. Sin embargo, cuando configuré "$ config ['log_threshold'] = 3", apareció un archivo de registro. Espero que esto ayude. ¡Gracias! Paz.
masarapmabuhay
25

Para simplemente poner una línea en el registro de errores del servidor, use la función error_log () de PHP. Sin embargo, ese método no enviará un correo electrónico.

Primero, para desencadenar un error:

trigger_error("Error message here", E_USER_ERROR);

De forma predeterminada, esto irá en el archivo de registro de errores del servidor. Consulte la directiva ErrorLog para Apache. Para configurar su propio archivo de registro:

ini_set('error_log', 'path/to/log/file');

Tenga en cuenta que el archivo de registro que elija ya debe existir y el proceso del servidor debe poder escribirlo. La forma más sencilla de hacer que el archivo se pueda escribir es hacer que el usuario del servidor sea el propietario del archivo. (El usuario del servidor puede ser nadie, _www, apache u otra cosa, dependiendo de la distribución de su sistema operativo).

Para enviar el error por correo electrónico, debe configurar un controlador de errores personalizado:

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);

Consulte la documentación de PHP correspondiente para obtener más información.

Mark Eirich
fuente
3

También asegúrese de haber permitido que codeigniter registre el tipo de mensajes que desea en un archivo de configuración.

es decir $config['log_threshold'] = [log_level ranges 0-4];

Gpak
fuente
1

Más información en lo que respecta a la parte 4 de la pregunta ¿Cómo se envía ese error a una dirección de correo electrónico? La función error_log también tiene un destino de correo electrónico. http://php.net/manual/en/function.error-log.php

Agha, aquí encontré un ejemplo que muestra un uso. Envíe un mensaje de error por correo electrónico usando error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);
Maestro James
fuente
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/
Charleskimani
fuente