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