Como faço para registrar erros e avisos em um arquivo?

Como posso ligar todos os erros e avisos e registá-los em um arquivo, mas para configurar tudo isso dentro do script (não alterando nada em php.ini)?

quero definir um nome de ficheiro e para que todos os erros e avisos sejam registados nele.

Author: Peter Mortensen, 2010-08-20

7 answers

Utilizar o seguinte código:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

Então veja o ficheiro:

tail -f /tmp/php-error.log

Ou actualizar php.ini conforme descrito em este item do blog a partir de 2008.

 371
Author: Aman, 2013-04-07 05:35:31

Ver

  • error_log - enviar uma mensagem de erro algures

Exemplo

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

Você pode personalizar o tratamento de erros com os seus próprios manipuladores de erros para chamar esta função para si sempre que ocorra um erro ou um aviso ou qualquer coisa que precise de registar. Para mais informações, consulte o Capítulo tratamento de erros no Manual do PHP

 96
Author: Gordon, 2014-12-03 09:59:08

Basta colocar estes códigos no topo do seu ficheiro PHP/index:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path
 48
Author: Yousha Aleayoub, 2020-04-29 19:41:04

Adicione este código em .htaccess (em alternativa a php.ini / ini_set Função):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

* como comentado: isto é para Apache-servidores do tipo, e não para Nginx ou outros.

 24
Author: T.Todua, 2019-12-12 13:03:13
É a minha curta Função pessoal.
# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}
 12
Author: Juergen, 2017-06-25 11:05:56

Dê uma olhada no log_errors opção de configuração em php.ini. Parece fazer exactamente o que queres. Eu acho que você pode usar o error_log uma opção para definir o seu próprio ficheiro de registo também.

Quando a Directiva log_errors for definida como On, quaisquer erros comunicados pelo PHP serão registados no registo do servidor ou no ficheiro especificado com error_log. Você pode definir estas opções com ini_set também, se for preciso.

(note que display_errors deve ser desactivado em php.ini se isto a opção está activa)

 7
Author: Frxstrem, 2014-06-21 15:25:24

Além disso, precisas da Directiva "opções de autorização" para que isto funcione. (Apache 2.2.15)

 0
Author: Stéphane, 2016-04-11 06:35:51