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.
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.
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
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
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.
# 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);
}
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)
Além disso, precisas da Directiva "opções de autorização" para que isto funcione. (Apache 2.2.15)