Este artigo apresenta os conceitos de Log, sua utilidade para o desenvolvedor, os riscos de uma má implementação, a maneira apropriada de sua utilização para que seu uso seja eficiente nas aplicações, suas configurações e o que de fato devemos logar.
Em que situação o tema é útil:
É de extrema importância ter conhecimento dos trechos executados de um sistema de software e compará-los com os resultados esperados diante de um contexto. Isto facilita o processo de investigação quando ocorre algum tipo de problema na execução de uma determinada aplicação. A atividade de análise de erros necessita de informações de Log bem definidas para realização de um bom trabalho de apuração de problemas.
Resumo DevMan:
A utilização de Log em sistemas é muito importante, principalmente no cenário atual, no qual existem inúmeras integrações entre sistemas. Assim, é importante saber quais informações são trafegadas de um sistema para o outro, se os dados chegaram corretamente, entre outras informações.
Para a correta inclusão de instruções de Log nas aplicações, é necessário ter bem claros os conceitos de Log. Quais informações devem ser logadas? Qual é o melhor formato para armazenar estes dados? Estas são apenas duas das perguntas que nos auxiliam na decisão do que logar. Este artigo mostrará o caminho a seguir, os pontos que devem ser encarados como críticos e o principal: a base para evoluir e aumentar seus conhecimentos sobre Log.
Quando caminhamos por uma trilha, deixamos rastros pelo caminho que, mesmo após nossa passagem, podem servir como indicadores dos pontos por onde passamos. As informações deixadas fornecem indícios da velocidade que empenhamos, do calçado que utilizamos e até das condições de tempo que enfrentamos.
Assim como uma caminhada numa trilha, uma aplicação em execução também toma caminhos de acordo com a lógica escrita para ela. São inúmeros caminhos possíveis dependendo das entradas, das invariantes e das condições de execução e, como na vida real, é bem interessante termos a possibilidade de investigar os rastros da execução de uma aplicação e a partir deles identificar os caminhos percorridos mesmo após a finalização de suas tarefas.
A boa notícia é que esses rastros podem ser embutidos em uma aplicação pelo próprio desenvolvedor, sendo eles chamados Logs de aplicações. Muitas vezes nos deparamos com comportamentos não desejados em sistemas de informação, e a melhor maneira para identificar os fluxos realizados e os parâmetros informados são exatamente os Logs.
É muito comum a integração entre sistemas, seja pela fusão de empresas, a união de diferentes plataformas, ou pela arquitetura da companhia trabalhar de maneira distribuída. Neste cenário é muito importante rastrear as informações trafegadas, verificando se todos os parâmetros foram passados corretamente, se as mesmas chegaram íntegras aos sistemas de destino e até mesmo problemas de infraestrutura que possam causar falhas de comunicação. Utilizando Log nas aplicações podemos identificar e atuar nas causas, tornando os sistemas mais estáveis e confiáveis.
O conceito de Log
Formalmente falando, Log é o processo de uso de um computador para coletar dados através de sensores, armazená-los e então utilizá-los para análise.
O processo de Log é usado amplamente em experiências científicas, em monitoramento de sistemas onde há a necessidade de coleta rápida e automática de informações e em casos no qual a relevância das informações é essencial. Exemplos dos tipos de informações que um processo de Log pode coletar incluem temperaturas, frequências de sons, vibrações, tempos, intensidades luminosas, correntes elétricas, pressão e mudanças de estados significantes.
Para a área de desenvolvimento de software, o Log deve ser utilizado em pontos sensíveis e importantes, tais como a verificação de parâmetros trafegados, valores de variáveis, entre outros.
Quanto aos valores de variáveis, podemos exemplificar através de um exemplo. Suponha um determinado método que executa algum cálculo envolvendo a idade de uma pessoa, e que para cada faixa de idade, a aplicação execute uma regra de cálculo diferente. Neste exemplo, o método que recebe a idade é um ponto candidato de Log, pois é importante registrar qual a idade informada e qual a regra de cálculo aplicada. Baseado nestas informações é possível rastrear possíveis falhas no sistema.
Utilidade do Log
Quando estamos desenvolvendo uma aplicação, realizamos diversos testes locais de execução, e qualquer problema que obtivermos nestas execuções podem ser verificados por simples inspeção do código ou apenas realizando um debug, verificando o comportamento do sistema a cada linha executada.
Uma vez que a aplicação seja distribuída para ambientes de teste e produção, geralmente sem conter os arquivos fontes, é que o procedimento de verificação de possíveis problemas que venham ocorrer nestes ambientes se torna mais complexo. Neste contexto é fundamental a verificação do estado da aplicação em diversos pontos críticos ou importantes e quais trechos de código foram executados para que seja realizado um diagnóstico mais preciso e, em consequência, uma resolução mais rápida do problema identificado.
Neste cenário é que se encontra a grande utilidade do Log dentro da área de desenvolvimento de sistemas. Sua grande eficácia está estreitamente ligada aos pontos onde o desenvolvedor escolhe para colocar os Logs, o tipo de informação que ele registra e o nível de detalhe das informações consideradas para serem rastreadas.
Nível de detalhe de um Log
O Log de uma aplicação não pode ser como a narração de um jogo de futebol onde cada lance é registrado. Ele deve conter informações relevantes que podem ser disponibilizadas em diferentes níveis de detalhe determinados pela necessidade da investigação de algum evento ocorrido na aplicação.
Na atividade que empenhamos em descobrir um erro, por exemplo, as informações necessárias em um Log são somente os pontos onde erros ou exceções são identificados. Já se um comportamento estranho da aplicação, que não reflita em algum erro, esteja em investigação, é interessante que mais pontos sejam analisados, tais como valores de variáveis importantes, invariantes, métodos que são executados dentro deste escopo, etc.
...