Posted on: January 13, 2021 09:49 PM
Posted by: Renato
Views: 840
Logs de execução são muito úteis para “catalogar” o ciclo de execução de um programa. Cada ação executada pelo software é registrada em um arquivo, juntamente com a data e a hora do ocorrido.
Muitos programadores enchem a tela de echo
e var_dump
, para descobrir o que está ocorrendo no código. Isso não é totalmente errado, mas há alternativas melhores. Aliás, já vi gente esquecer de tirar var_dump
antes de mandar o sistema pro ar. Resultado: todo mundo vendo o debug ao acessar o site…
Neste artigo vou mostrar como criar um simples sistema de logs usando PHP.
Como Um Arquivo de Logs Deve Ser
Um simples exemplo de um registro em um arquivo de log é o seguinte:
[2021-01-13 00:00:00] INFO: Executando ação X... |
Bem simples. Nada especial.
O arquivo nada mais é do que um conjunto de registros, um por linha, que indicam a data e a hora em que um determinado evento ocorreu.
No exemplo acima, incluí o nível do log, que é representado pela palavra INFO. Nesse caso, é um log de Informação. Poderíamos ter outros níveis, como Avisos (Warning) e erros (Error).
Função Para Gerar Logs
Vou mostrar uma simples função para criação de logs.
Vamos considerar os três tipos (aqui chamo de níveis) de logs que citei antes aqui no artigo.
Vou chamar a função de logMsg
. Ela aceita três parâmetros, mas apenas o primeiro é obrigatório.
O primeiro parâmetro é a mensagem do log. O segundo é o nível do log (pode ser info
, que é o valor padrão, warning
ou error
). O terceiro parâmetro é o nome do arquivo onde o log será escrito. Por padrão, será escrito no arquivo main.log
.
Vamos ao código, com os deviso comentários.
function logMsg( $msg, $level = 'info', $file = 'main.log' ) { // variável que vai armazenar o nível do log (INFO, WARNING ou ERROR) $levelStr = ''; // verifica o nível do log switch ( $level ) { case 'info': // nível de informação $levelStr = 'INFO'; break; case 'warning': // nível de aviso $levelStr = 'WARNING'; break; case 'error': // nível de erro $levelStr = 'ERROR'; break; } // data atual $date = date( 'Y-m-d H:i:s' ); // formata a mensagem do log // 1o: data atual // 2o: nível da mensagem (INFO, WARNING ou ERROR) // 3o: a mensagem propriamente dita // 4o: uma quebra de linha $msg = sprintf( "[%s] [%s]: %s%s", $date, $levelStr, $msg, PHP_EOL ); // escreve o log no arquivo // é necessário usar FILE_APPEND para que a mensagem seja escrita no final do arquivo, preservando o conteúdo antigo do arquivo file_put_contents( $file, $msg, FILE_APPEND ); } |
Como Usar A Função de Geração de Logs
Para usar a função logMsg
que criamos, basta chamá-la com, pelo menos, o primeiro parâmetro.
Vamos a alguns exemplos.
Geração de Log de Informação
Para gerar um simples log de informação, use o seguinte exemplo.
logMsg( "Executando a tarefa X..." ); |
Isso vai gerar a seguinte linha no arquivo de log
[2021-01-13 22:07:03] [INFO]: Executando a tarefa X... |
Geração de Log de Aviso
Para gerar um log de aviso, use o seguinte exemplo.
logMsg( "Isto é um aviso.... a operação X pode falhar...", 'warning' ); |
Isso vai gerar a seguinte linha no arquivo de log
[2021-01-13 22:0703] [WARNING]: Isto é um aviso.... a operação X pode falhar... |
Geração de Log de Erro
Para gerar um log de erro, use o seguinte exemplo.
logMsg( "Isto é um erro. A operação X falhou", 'error' ); |
Isso vai gerar a seguinte linha no arquivo de log
[2021-01-13 22:0703] [ERROR]: Isto é um erro. A operação X falhou |
Por Que Não Usei a Função error_log
do PHP
O PHP possui a função error_log
. Você é livre para usá-la, se desejar.
Eu preferi não usá-la pois ela não permite usar as configurações a mais que acho úteis, como o nível de log. Ela é mais focada em erros, como o próprio nome da mensagem sugere.
Cuidado Com a Quantidade de Logs
Logs são muito úteis, claro. Mas existe um custo para o servidor.
Cada escrita no arquivo toma tempo da CPU e deixa sua aplicação um pouco mais lenta. É pouco perceptível quando há poucos logs.
Porém, se você configurar muitas gerações de logs, verá uma queda no desempenho. Principalmente se seu sistema receber muitos acessos simultâneos. Afinal, escrita em disco é uma das tarefas mais custosas para a CPU.
Por isso, use os logs com cautela. Gere logs apenas quando realmente necessário. Não crie logs inúteis. E, se gerar logs apenas para debug durante o desenvolvimento, lembre-se de removê-los antes de colocar a aplicação em produção.
Padrão PSR-3 de Logs
O grupo PHP-Fig criou, dentre outras recomendações, o PSR-3, que é uma recomendação de padronização para bibliotecas de geração de logs.
Se você já tem conhecimentos sobre Orientação a Objetos, recomendo analisar o PSR-3 e tentar aplicar em seus projetos. Se ainda não conhecer OOP, vá com calma. Use a função que mostrei nesse post e, depois, quando já tiver domínio de OOP, aplique os conceitos do PSR-3.
Por: Roberto Beraldo
Fonte: http://rberaldo.com.br/como-gerar-logs-execucao-php/
Aqui abaixo um modelo que estou usando:
```php
Donate to Site
Renato
Developer