O que seria de nós programadores se não fosse os arquivos de Log… Mais quando utilizamos o AMFPHP só aparece os erros do tipo Fatal Error. Mais isso tem solução.
Dentro da pasta amfphp/core/shared/exception existe dois arquivos, php4Exception.php e php5Exception.php. Por um destes arquivo passa todos os erros que acontecem dentro do AMFPHP.
Como só utilizo PHP5 vou mostrar como manipular Log neste arquivo.
Arquivo amfphp/core/shared/exception/php5Exception.phpfunction amfErrorHandler($level, $string, $file, $line, $context) { //forget about errors not defined at reported $amfphpErrorLevel = $GLOBALS['amfphp']['errorLevel']; if( error_reporting() != 0 && ($amfphpErrorLevel | $level) == $amfphpErrorLevel ) { throw new VerboseException($string, $level, $file, $line); } }
Veja que pelo IF passa poucos passa apenas alguns dos erros. Então não podemos implementar os Log no MessageException.php. mais então vamos criar uma nova classe que fará o trabalho de salvar estes Log, logAMF.php e inclui-lo no php5Exception.php.
Aproveitem que criaram um arquivo e criem também a pasta log em amfphpcore.
Veja o arquivo php5Exception.php:
Arquivo amfphp/core/shared/exception/php5Exception.phpfunction amfErrorHandler($level, $string, $file, $line, $context) { //forget about errors not defined at reported $amfphpErrorLevel = $GLOBALS['amfphp']['errorLevel']; new logAMF($level, $string, $file, $line, $context); if( error_reporting() != 0 && ($amfphpErrorLevel | $level) == $amfphpErrorLevel ) { throw new VerboseException($string, $level, $file, $line); } }
E o arquivo logAMF.php:
Arquivo amfphp/core/shared/exception/logAMF.php<?php class logAMF { var $nErro; var $msgErro; var $nomeArquivo; var $numLinha; var $vars; function logAMF($nErro, $msgErro, $nomeArquivo, $numLinha, $vars) { $this->nErro = $nErro; $this->msgErro = $msgErro; $this->nomeArquivo = $nomeArquivo; $this->numLinha = $numLinha; $this->vars = $vars; $this->logErro(); } function getDescricaoErro($nErro) { // Define uma matriz associativa com as strings dos erros $desErro = array( 1 => "Error", 2 => "Warning", 4 => "Parsing Error", 8 => "Notice", 16 => "Core Error", 32 => "Core Warning", 64 => "Compile Error", 128 => "Compile Warning", 256 => "User Error", 512 => "User Warning", 1024 => "User Notice", 2048 => "Runtime Notice", 4096 => "Catchable Fatal Error", 8191 => "ALL"); if( isset( $desErro[$nErro] ) ) { return $desErro[$nErro]; } return null; } function logErro() { $dt = date("d-m-Y H:i:s"); $mensagem = str_replace(" ", "", $this->msgErro); $msgLog = "[" . $dt . "][" . $this->nErro . " - " . $this->getDescricaoErro($this->nErro) . "][" . $this->nomeArquivo . " linha: " . $this->numLinha . "] - " . $mensagem; // nome do arquivo $diretorioLog = AMFPHP_BASE . "log/"; $NomeComCaminho = $diretorioLog . date("Ymd") . ".txt"; clearstatcache(); // gravando no arquivo de log $this->grava($NomeComCaminho,$msgLog); } function grava($NomeComCaminho,$msgLog) { $nomeArquivo = str_replace("//", "/", $NomeComCaminho); if ($setaArquivo = @fopen($nomeArquivo, "a")) { @fwrite($setaArquivo, $msgLog); } } } ?>
Agora dentro da pasta amfphp/core/log/ irá aparecer um arquivo com a data atual contendo todos os erros do AMFPHP.