DEV Community

Cover image for Python Logging Formatters
DrxwHe4rt
DrxwHe4rt

Posted on

1

Python Logging Formatters

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'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Depois, vamos definir a nstancia do objeto getLogger():

logger = logging.getLogger()
Enter fullscreen mode Exit fullscreen mode

E o nivel de criticidade do objeto:

logger.setLevel(logging.DEBUG)
Enter fullscreen mode Exit fullscreen mode

Agora, chegamos no ponto em que gostariamos. É o momento de definir o nosso formatador:

formatter = logging.Formatter(
    '%(asctime)s:%(levelname)s:%(message)s'
)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Vamos finalizar nosso código dizendo ao módulo logging qual o nosso formatador, utilizando a função setFormatter:

sh.setFormatter(formatter)
Enter fullscreen mode Exit fullscreen mode

Adicione uma simples mensagem para que nosso script gere um log a partir dela:

logger.debug('Olá.')
Enter fullscreen mode Exit fullscreen mode

execute o nosso script:

python app.py
Enter fullscreen mode Exit fullscreen mode

A saida deverá ser algo parecido com isso:
2

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'
)
Enter fullscreen mode Exit fullscreen mode

Execute outra vez o script:

python app.py
Enter fullscreen mode Exit fullscreen mode

O retorno será esse:
Captura de tela_2021-01-13_19-06-24

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'
)
Enter fullscreen mode Exit fullscreen mode

Execute o script e o seu resultado será esse:
3

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'
)
Enter fullscreen mode Exit fullscreen mode

Tendo como resultado:
4

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.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay