Frameworks php

Precisa De Log No Sistema? – Zf2 Faz Isso Por Você

Olá pessoal! Vou apresentar o recurso de Log do Zend Framework 2, um dos diversos componentes disponíveis pelo Framework.
Mas antes da ação, vamos entender um pouquinho da base do Zend Log.

Para termos acesso ao componente de log, devemos instanciar ZendLogLogger. E toda instância de Logger deve ter um Writer.

$logger = new ZendLogLogger;
$writer = new ZendLogWriterStream('/path_to_Log/file.log');

Ao instanciar Stream, devemos passar o caminho do arquivo onde será mantido nosso log.

Podemos ter diversas instâncias de Logger, é importante frisar que deve ter pelo menos um Writer. Podemos definir a ordem de prioridade para cada Writer. Abaixo podemos ver a tabela de definição de prioridade.

EMERG   = 0;  // Emergency: system is unusable
ALERT   = 1;  // Alert: action must be taken immediately
CRIT    = 2;  // Critical: critical conditions
ERR     = 3;  // Error: error conditions
WARN    = 4;  // Warning: warning conditions
NOTICE  = 5;  // Notice: normal but significant condition
INFO    = 6;  // Informational: informational messages
DEBUG   = 7;  // Debug: debug messages

As prioridades não são arbitrarias, vem do protocolo syslog BSD que é descrito na RFC-3164. Os nomes e números de prioridade são compatíveis com PEAR Log.

Como visto na tabela, EMERG tem maior prioridade, e o DEBUG menor prioridade, você pode alterar as ordens de prioridade ao utilizar o Logger, porém não é recomendado por não ser uma boa prática.

Para podermos registrar uma mensagem de Log, devemos chamar o método log() , do objeto que criamos e definir sua prioridade e mensagem.

$logger->log(ZendLogLogger::INFO, ‘Nossa primeira mensagem de Log’);

Nosso primeiro parâmetro é a ordem de prioridade e nosso segundo parâmetro consiste em nossa mensagem que queremos armazenar. A ordem de prioridade deve ser uma das prioridades reconhecidas pela instância de Logger (nossa tabela de prioridade).
Temos uma versão mais simplificada, para escrever uma mensagem de log.

$logger->info(‘Outra maneira de manter o log INFO’);

Esta maneira não nos obriga a passar nossa ordem de prioridade tendo em vista que o método chamado é correspondente à ordem que desejamos.

Para podermos destruir nossa instância de Logger, basta atribuir um valor null. Esta abordagem irá automaticamente chamar o método shutdown() de cada instância de Writer.

$logger = null;

Chega de teoria vamos para a PRÁTICA!

Estou utilizando o Skeleton padrão do ZF2 (criei o projeto com o Zftool. E vamos registrar em log todas as vezes que algum visitante entrar em nosso projeto (home).

1º – Vamos criar o diretório log dentro do diretório data.

Img01

2º – Agora vamos criar o arquivo log.teste.

Img02

É importante lembrar que devemos ter acesso de leitura e escrita para o diretório/arquivo criado.

3º – Vamos para o controlador ApplicationController.

Img03

Vamos detalhar os passos que foram implementados.
Linhas 12 e 13.

Inserimos nossas dependências.

use ZendLogLogger;
use ZendLogWriterStream;

Linha 21.

Definimos a variável com o caminho do nosso arquivo onde ficarão armazenados os Logs.

$path = './data/log/log.teste';

Linha 23.

Instanciamos nossa classe de Logger.

$logger = new Logger();

Linha 24.

Instanciamos nossa classe Stream. Para nossa instância de Strean é necessário passar o caminho do arquivo de log, por isso passamos nossa variável $path.

$writer = new Stream($path);

Linha 26.

Incluímos nosso Writer em nossa instância de Logger.
Linha 28.

Escrevemos nosso primeiro log, o primeiro parâmetro é a ordem de prioridade e o segundo nossa mensagem.

$logger->log(Logger::INFO, 'Nossa primeira mensagem de LOG, INFO');

Agora vamos acessar nosso projeto.

Img04

Após realizar o acesso ao projeto vemos que para o usuário não houve mudança alguma no visual da nossa aplicação; vamos então abrir nosso arquivo log.teste.

Img05

E pronto aí está, temos nosso primeiro registro de log!
Vemos que ele armazena automaticamente data, hora, a ordem de prioridade escolhida e por último nossa mensagem.
Vamos implementar as outras mensagens de log.

Img06

Vamos detalhar as novas implementações.

Linhas 30 a 37.

Escrevemos nossas mensagens de log com a segunda opção de escrita de logs. Chamando cada ação separadamente e incluindo uma mensagem personalizada para cada uma delas.
Vamos acessar novamente a home do nosso projeto, e em seguida abrir nosso arquivo de log.

Img07

Viram, é muito simples implementar um sistema de log poderoso em nossas aplicações. Claro que a maneira que implementamos aqui foi meramente didático, pois o Zend Framework 2 tem diversas maneiras de utilizarmos log. A implementação de log vai de acordo com a necessidade do seu sistema.
Espero ter ajudado a compreender o componente de log, e no próximo post vamos implementar registro de log no banco de dados.

Precisa De Log No Sistema? – Zf2 Faz Isso Por Você was originally published by Diego Brocanelli at Frameworks PHP on February 07, 2015.

Powered by WPeMatico