Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

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.php
function 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.php
function 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.

Baixe aqui o AMFPHP com esta implementação.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

2 comentários

Deixe uma resposta

  1. 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.

     
  2. 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!!!