Esse artigo iremos aprender a formatar nossa mensagem de log e entregar uma experiencia melhor nesse quesito. Mas, primeiro vamos entender o que é um formatter.
- Basicamente, eles configuram a ordem, a estrutura e o conteúdo finais da mensagem de log;
- Se não houver formatação na mensagem, o padrão é usar a mensagem bruta;
- Se não houver formatação na data, o formato de data padrão é: %Y-%m-%d %H:%M:%S;
- A string de mensagem padrão é:
'%(asctime)s - %(levelname)s - %(message)s'
Vamos ver isso em pratica...
Comece criando o arquivo .py, no meu caso, irá se chamar app.py, sinta-se a vontade para colocar o nome que desejar. Após criar o arquivo, iremos importar o módulo logging:
import logging
Depois, vamos definir a nstancia do objeto getLogger():
logger = logging.getLogger()
E o nivel de criticidade do objeto:
logger.setLevel(logging.DEBUG)
Agora, chegamos no ponto em que gostariamos. É o momento de definir o nosso formatador:
formatter = logging.Formatter(
'%(asctime)s:%(levelname)s:%(message)s'
)
Vamos utilizar a formatação padrão e ao decorrer do artigo vamos implementando essa colocação.
Apenas para método de praticidade, iremos utilizar o modo StreamHandler (visto no artigo anterior), dessa forma o log ficará somente no terminal e não salvará em nenhum arquivo:
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
Vamos finalizar nosso código dizendo ao módulo logging qual o nosso formatador, utilizando a função setFormatter:
sh.setFormatter(formatter)
Adicione uma simples mensagem para que nosso script gere um log a partir dela:
logger.debug('Olá.')
execute o nosso script:
python app.py
A saida deverá ser algo parecido com isso:
Vamos agora, dizer ao nosso formatador que queremos que ele mostre qual arquivo gerou o log. Para isso, implementaremos o seguinte parametro a nossa string: %(filename)s.
# sua variavel formatter deverá ficar dessa forma:
formatter = logging.Formatter(
'%(asctime)s:%(levelname)s:%(filename)s:%(message)s'
)
Execute outra vez o script:
python app.py
Pensando bem, essa data esta meio confusa, não esta?
Que tal se formatássemos a data então?
Veja:
- a função Formatter contém uma variavel chamada datefmt, podemos usar ela para formatar a nossa data/hora e retornar algo mais user friendly. Dito isso, mudaremos o conteúdo da nossa variavel formatter adicionando o parametro datefmt da seguinte forma:
formatter = logging.Formatter(
'%(asctime)s:%(levelname)s:%(filename)s:%(message)s',
# Padrão de data: dia/mes/ano
# Padrão de hora: hora/minuto/segundos
# Sistema (am/pm)
datefmt='%d/%m/%Y %I:%M:%S %p'
)
Execute o script e o seu resultado será esse:
Você pode embelezar um pouco mais sua string formatadora e deixa-la da seguinte forma:
formatter = logging.Formatter(
'Data/Hora: %(asctime)s | level: %(levelname)s | file: %(filename)s | mensagem: %(message)s',
# Padrão de data: dia/mes/ano
# Padrão de hora: hora/minuto/segundos
# Sistema (am/pm)
datefmt='%d/%m/%Y %H:%M:%S %p'
)
Conclusão
Vimos nesse artigo que podemos formatar nossa log e deixa-lo mais amigável para quem for lê-lo (normalmente, será um desenvolvedor). Lendo a documentação você irá perceber que existem outras formas de realizar essa formatação, mas procurei um jeito mais didático de mostrar como se faz.
Top comments (0)