Postagem

Aqui é onde faço postagens de coisas que acho interessante.

Classe para geração de log

Postagem do dia 01/01/1970 na categoria Classes em PHP



Classe que grava em arquivo log de dados como objeto, array ou string.


<?php 
/**
 * Classe que cria log em arquivo fisicos no servidor 
 * 
 * @exemplo Log::save( 
 *   'Array, String or Object', 
 *   '../webroot/log/', 
 *   'nomearquivolog',
 *   'log'    
 * );  
 * 
 * @param  Object $object String, array ou objeto
 * @param  String $directory Diretorio fisico onde ficara o arquivo
 * @param  String $nameFile Nome do arquivo sem extensao
 * @param  String $extensionFile Extensao do arquivo sem ponto
 * 
 * @author Tayron Miranda 
 * 
 * @since  2.0 - 10 de abril de 2014
 *         1.7 - 25 de novembro de 2011
 */
class Log {

    static $escape = array(
        'find' => array('à€', 'à', 'à‚', 'àƒ', 'à„', 'à…', 'à†', 'à‡', 'àˆ', 'à‰', 'àŠ', 'à‹', 'àŒ', 'à', 'àŽ', 'à', 'à', 'à‘', 'à’', 'à“', 'à”', 'à•', 'à–', 'à˜', 'à™', 'àš', 'à›', 'àœ', 'à', 'àŸ', 'à ', 'á', 'à¢', 'ã', 'à¤', 'à¥', 'à¦', 'à§', 'à¨', 'é', 'ê', 'à«', 'à¬', 'í', 'à®', 'à¯', 'à±', 'à²', 'ó', 'ô', 'àµ', 'à¶', 'à¸', 'à¹', 'ú', 'à»', 'à¼', 'à½', 'à¿', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'),
        'replace' => array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o')
    );
    
    /**
     * Metodo que registra as informacoes no arquivo de log no servidor
     *
     * @param Object $object Objeto a ser impresso ( pode ser um array, object ou string )
     * @param String $directory Caminho fisico para o diretorio onde o log devera ser gerado
     * @param String $nameFile Nome do arquivo sem extensao
     * @param String $extensionFile Nome da extensao sem o ponto
     */
    static function save($object = null, $directory = '/App/Log/', $nameFile = 'error', $extensionFile = 'html') {        
        self::verifyDirectory($directory);
        $contentExisting = self::checkExistingContent($directory, $nameFile, $extensionFile);            
        $log = fopen($directory . $nameFile . '.' . $extensionFile, 'a+'); // Criando e abrindo o arquivo pra edicao
        $message = self::formatMessage( self::transformIntoString($object), $extensionFile );
         
        fwrite($log, $message . chr(13) . chr(10)); // Gravando os dados no documento  

        // Caso ja tenha um arquivo criado anteriormente, concateno com o conteudo do arquivo anterior
        ( $contentExisting != null ) ? fwrite($log, $contentExisting) : '';

        // Fechando e salvando o documento
        fclose($log);
    }
    
    /**
     * Metodo que verifica se o diretorio onde o log sera gravado existe, caso nao exista ele irah criar
     * 
     * @param String $directory Nome do diretorio a ser verificado
     */
    static function verifyDirectory($directory){        
        if (!file_exists($directory)):
            mkdir($directory);
            chmod($directory, 755);
        endif;        
    }
    
    /**
     * Metodo que verifica se ja existe um arquivo de log, copia seu conteudo, exclui o arquivo para ser recriado mais tarde com mais dados
     */
    static function checkExistingContent($directory, $nameFile, $extensionFile){        
        $content = null;
        if (file_exists($directory . $nameFile . '.' . $extensionFile)):
            $content = file_get_contents($directory . $nameFile . '.' . $extensionFile);
            unlink($directory . $nameFile . '.' . $extensionFile);            
        endif;        
        return $content;
    }
    
    /**
     * Metodo que pega o objeto a ser gravado no log e o transofrma em string
     * 
     * @param Object $object Recebe um objeto, array ou string para ser impresso no log
     * @return String Retorna string da transformacao do objeto para ser impresso do log
     */
    static function transformIntoString($object){
        // Se for um array, trato os dados como tal
        if ( is_array($object) ):
            $cont = 0;
            foreach ($object as $chave => $msg):
                $cont++;
                $objectInString .= ( $cont == 1 ) 
                    ? 'ARRAY = ' 
                    : sprintf( '[%s] = %s', $chave, $msg );
            endforeach;

        // Se for um objeto, trato os dados como tal  
        elseif (is_object($object) == true):
            $cont = 0;
            foreach ($object as $chave => $valor):
                $cont++;
                $objectInString .= ( $cont == 1 ) 
                    ? 'OBJECT = ' 
                    : sprintf('[%s] = %s', $chave, $valor);
            endforeach;
            
        // Se for uma string  
        else:
            $objectInString = 'STRING = ' . $object;
        endif; 
        
        return $objectInString;
    }    
    
    /**
     * Metodo que formata o texto conforme o tipo de arquivo a ser gerado
     * 
     * @param String $string Texto a ser impresso no log
     * @param String $extensionFile Extensao do arquivo a ser gerado
     * @return String Retorna string formatada de acordo com o tipo de documento a ser gerado
     */
    private function formatMessage( $string, $extensionFile ){        
        return ( $extensionFile == 'html')
            ? sprintf(
                '<p>%s | <span style="color: #999; font-weigth: bold" >%s</span></p>',
                date('d/m/Y H:i:s'),
                htmlentities( str_replace(self::$escape['find'], self::$escape['replace'], $string ) )
              )            
            : date('d/m/Y H:i:s | ') . htmlentities( str_replace(self::$escape['find'], self::$escape['replace'], $string ) );        
    }
}
 
}
 
// criando um arquivo de log chamado teste.log
 Log::save( 'Aqui vai o texto a ser armazenado no log', '/log/', 'teste', 'log'); 

No arquivo gerado você verá algo parecido com isso:


10/04/2014 16:25:15 | STRING = Aqui vai o texto a ser armazenado no log
09/04/2014 12:05:25 | STRING = Aqui vem uma mensagem de erro



Deixe seus comentários abaixo: