Como fazer o registro de erros no CodeIgniter (PHP)

92

Eu quero o log de erros no PHP CodeIgniter. Como habilito o registro de erros?

Eu tenho algumas questões:

  1. Quais são todas as etapas para registrar um erro?
  2. Como um arquivo de log de erros é criado?
  3. Como enviar a mensagem de erro para o arquivo de log (sempre que ocorrer um erro)?
  4. Como você envia esse erro por e-mail para um endereço de e-mail?
udaya
fonte

Respostas:

180

O CodeIgniter possui algumas funções de registro de erros integradas.

  • Torne sua pasta / application / logs gravável
  • Em /application/config/config.php defina
    $config['log_threshold'] = 1;
    ou use um número maior, dependendo de quantos detalhes você deseja em seus registros
  • Usar log_message('error', 'Some variable did not contain a value.');
  • Para enviar um e-mail, você precisa estender o método da classe CI_Exceptions principal log_exceptions(). Você pode fazer isso sozinho ou usar este . Mais informações sobre como estender o núcleo aqui

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

Keyo
fonte
Existem implicações de segurança para isso?
Aakil Fernandes
Isso despeja dados em um arquivo php cujo nome de arquivo está no formato: log- [Ymd H: i: s] ou qualquer valor definido na configuração de chave log_date_format definida em seu arquivo de configuração. Contanto que você não consiga registrar / despejar dados confidenciais, deve ser bastante seguro. Este arquivo é relativo a uma página index.html por padrão, então obviamente os arquivos php gerados não seriam acessíveis publicamente - mas você nunca saberá. Certifique-se de ter todas essas precauções em vigor se você alterar o diretório de aplicativos / logs padrão.
Vincent Edward Gedaria Binua
7
Torne sua pasta / application / logs gravável <<< that
help
Quando defini "$ config ['log_threshold'] = 1;", não recebi nenhum log na minha pasta / application / logs. No entanto, quando eu defini "$ config ['log_threshold'] = 3", um arquivo de log apareceu. Espero que isto ajude. Obrigado! Paz.
masarapmabuhay de
25

Para simplesmente colocar uma linha no log de erros do servidor, use a função error_log () do PHP. No entanto, esse método não enviará um e-mail.

Primeiro, para acionar um erro:

trigger_error("Error message here", E_USER_ERROR);

Por padrão, isso irá para o arquivo de log de erros do servidor. Consulte a diretiva ErrorLog para Apache. Para definir seu próprio arquivo de log:

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

Observe que o arquivo de log escolhido já deve existir e ser gravável pelo processo do servidor. A maneira mais simples de tornar o arquivo gravável é tornar o usuário do servidor o proprietário do arquivo. (O usuário do servidor pode ser ninguém, _www, apache ou qualquer outra coisa, dependendo da distribuição do seu sistema operacional.)

Para enviar o erro por e-mail, você precisa configurar um manipulador de erros 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);

Por favor, veja a documentação PHP relevante para mais informações.

Mark Eirich
fonte
3

Certifique-se também de permitir que o codeigniter registre o tipo de mensagens que deseja em um arquivo de configuração.

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

Gpak
fonte
1

Mais sobre a questão parte 4 Como você envia esse erro por e-mail para um endereço de e-mail? A função error_log também tem destino de email. http://php.net/manual/en/function.error-log.php

Agha, aqui encontrei um exemplo que mostra um uso. Enviar mensagem de erro por e-mail 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);
Mestre James
fonte
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
fonte