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.









Achei muito boa a dica... Só precisa refinar o log, ele cresce muito rápido e o conteúdo é meio difícl de extrair as informações, vem tudo junto... Mas isso é lição de casa minha!!! heheh
Valeu pela dica!!!
Sim, ele salva todos os erros, sem distinção de sexo, raça e religião.
O mais fácil é pesquisar se em $this->nomeArquivo existe a palavra "services" e só gravar se existir. Lilmita em muito.