Imagem de capa do artigo Log de Acessos - Zend Framework 1

Log de Acessos - Zend Framework 1

Nesse tutorial vou ensinar como criar um log de acessos, que registra em um arquivo de texto todos os acessos que fizeram ao site ou aplicação, gravando o IP e a URL acessada, utilizando Zend Framework 1.

Primeiramente crie um arquivo chamado log_access.log ou qualquer outro nome que você deseja, você pode usar o Notepad ++ para isso.

Como recomenda a própria Zend, vamos coloca-lo na pasta data/log, conforme imagem...

Log de Acessos Zend Framework 1

Após isso em seu Bootstrap da aplicação crie um método _init para registrar o seu plugin de Log de Acesso, e também crie outro método que irá tratar o log, setando o formato do log, que no nosso caso será em um arquivo de texto, e também setando o formato da data e hora, e por fim registramos o log...

Bootstrap.php


/**
 * Inicia os logs da aplicação
 */
protected function _initLogger() 
{ 
   $this->formatterWriterLogger('logger_access', 'log_access.log');

   $front = Zend_Controller_Front::getInstance();
   $front->registerPlugin(new Application_Plugin_LoggerAccess());
} 

/**
 * Defini e seta o formato que será escrito no arquivo de log, 
 * setando também o formato da data, 
 * e por fim registra o log.
 * 
 * @param string $loggerName Nome do log a ser registrado
 * @param string $loggerFile Nome do arquvio de log, onde será gravado
 */
private function formatterWriterLogger($loggerName, $loggerFile)
{
    // Defini o tipo de escritor, setando o caminho do arquivo de log 
    $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/logs/' . $loggerFile);

    // Define o formato que será gravado o log
    $format = '%timestamp% %priorityName%: %message%' . PHP_EOL;
    $formatter = new Zend_Log_Formatter_Simple($format);
    $writer->setFormatter($formatter);

    // Instancia a classe Zend_Log
    $logger = new Zend_Log($writer);
    // Define o formato para as datas
    $logger->setTimestampFormat("d/m/Y H:i:s");
    // Registra o log
    Zend_Registry::set($loggerName, $logger);
}

O método formatterWriterLogger, é interessante pois com ele podemos formatar outros tipos de logs que nossa aplicação venha a ter, como logs de erros, logs de cadastros, entre outros.

Após isso precisamos criar nosso plugin, ele ficará na pasta application/plugins, crie um arquivo chamado LoggerAccess.php, sua estrutura ficará parecida com a imagem a baixo...

Log de Acessos Zend Framework 1

Insira o seguinte código...

LoggerAccess.php


/**
 * Grava os acessos do site no arquivo de log de acessos
 * será gravado o IP, a URL digitada, o nome do módulo, nome do controller e nome da action.
 * 
 * @author    Everson da luz
 * @copyright 
 * @version   1.0 
 */
class Application_Plugin_LoggerAccess extends Zend_Controller_Plugin_Abstract 
{
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    {
        // Chama a função para pegar o IP
        $ip = $this->getIp($request);

        // Url do site, sem o procotolo HTTP
        $uri = $_SERVER['REQUEST_URI'];

        if ($uri != "/favicon.ico") {
            // Pega o log pelo seu nome registrado
            $logger = Zend_Registry::get('logger_access');
            // Escreve no arquivo de log, o segundo parâmetro referencia o tipo de log
            $logger->log(
                "IP: "         . $ip . ' - ' .
                "URL: "        . $uri . ' - ' .
                "MODULE: "     . $request->getModuleName() . ' - ' .
                "CONTROLLER: " . $request->getControllerName() . ' - ' .
                "ACTION: "     . $request->getActionName()
            ,Zend_Log::INFO);
        }
    }

    /**
     * Pega o IP
     * 
     * @param  type $request
     * @return string
     */
    private function getIp($request)
    {
        $ipaddress = '';

        if ($request->getServer('HTTP_CLIENT_IP')) {
            $ipaddress = $request->getServer('HTTP_CLIENT_IP');
        } else if ($request->getServer('HTTP_X_FORWARDED_FOR')) {
            $ipaddress = $request->getServer('HTTP_X_FORWARDED_FOR');
        } else if ($request->getServer('HTTP_X_FORWARDED')) {
            $ipaddress = $request->getServer('HTTP_X_FORWARDED');
        } else if ($request->getServer('HTTP_FORWARDED_FOR')) {
            $ipaddress = $request->getServer('HTTP_FORWARDED_FOR');
        } else if ($request->getServer('HTTP_FORWARDED')) {
            $ipaddress = $request->getServer('HTTP_FORWARDED');
        } else if ($request->getServer('REMOTE_ADDR')) {
            $ipaddress = $request->getServer('REMOTE_ADDR');
        } else {
            $ipaddress = 'UNKNOWN';
        }

        return $ipaddress;
    }
}

Feito isso cada vez que alguém acessar qualquer página de seu site será gravado no arquivo de log algo como...

28/06/2015 19:07:28 INFO: IP: 201.00.01.59 - URL: /site/index/index - MODULE: site - CONTROLLER: index - ACTION: index

Com isso você sempre terá um log de acessos para consultas futuras, pois nunca se sabe quando precisara verificar qual IP acessou determinada URL em tal horário.

Gostou? Compartilhe em suas redes!

Ícone do WhatsApp Ícone do X Ícone do Linkedin Ícone do Facebook

Leia mais

Voltar para o topo