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


233

Como ativar todos os erros e avisos e registrá-los em um arquivo, mas configurar tudo isso no script (sem alterar nada no php.ini)?

Quero definir um nome de arquivo e para que todos os erros e avisos sejam registrados nele.

Respostas:


358

Use o seguinte código:

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

Então assista o arquivo:

tail -f /tmp/php-error.log

Ou atualize php.iniconforme descrito nesta entrada de blog de 2008.


41
ini_setfunciona apenas se esse código for executado. Não é útil para código que possui erros de análise porque o erro ocorrerá antes que o código seja executado. Em vez disso, escreva essas alterações no php.ini.
hakre

9
Se você não pode editar php.ini, você deve ser capaz de adicionar isso no .htaccess: php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log. Veja perishablepress.com/…
Matthieu

1
Tenho uma pergunta, como obter o arquivo error.log para ser criado na minha pasta htdocs?
Tommy

Eu acho que você acabou de mudar a pasta de tmp/php-error.logpara qual local você deseja?
Luke

Isso trava meu PHP na
versão


42

Basta colocar esses códigos no topo do seu arquivo 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

4
Isso é apenas se você também deseja que todos os erros sejam exibidos na saída e / ou no navegador, além do log. display_errorsNUNCA deve estar ativado em um servidor de produção ativo - essa diretiva é especificamente para saída do usuário e não tem efeito no log. php.net/manual/en/…
Aaron Wallentine

22

adicione este código em .htaccess (como uma alternativa da função php.ini / ini_set ):

<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: é para servidores do tipo Apache , e não para Nginx ou outros.


7
Isso é muito especificamente relacionado ao módulo PHP do Apache, no entanto.
precisa saber é o seguinte

9

Essa é a minha função curta 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);
}

6

Dê uma olhada na log_errorsopção de configuração no php.ini. Parece fazer exatamente o que você quer. Eu acho que você pode usar a error_logopção para definir seu próprio arquivo de log também.

Quando a log_errorsdiretiva é definida como On, quaisquer erros relatados pelo PHP serão registrados no log do servidor ou no arquivo especificado com error_log. Você também pode definir essas opções ini_set, se necessário.

(Observe que display_errorsdeve ser desativado no php.ini se esta opção estiver ativada)


1
Por que deve display_errorsser desativado se você ativar log_errors? Não faz sentido na minha opinião. :)
Guido Hendriks

5
Porque não há necessidade de exibir o conteúdo dos erros para o público em um servidor de produção, especialmente se o texto do erro estiver sendo discretamente conectado a um arquivo.
Shabbyrobe

3
Os erros de exibição devem estar sempre desativados no servidor de produção. Não se o log de erros estiver configurado para outro lugar, mas sempre. Os erros são registrados no log de erros do apache por padrão, isso geralmente é suficiente.
31413 Pihhan

1
A indicação de erros na produção faz PHP mais populares :)
peterm

0

Além disso, você precisa da diretiva "AllowOverride Options" para que isso funcione. (Apache 2.2.15)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.