DEV Community

Cover image for Python Logging Config
DrxwHe4rt
DrxwHe4rt

Posted on

Python Logging Config

Caso tenha você tenha começado a ler esse artigo e esta se perguntado "que diabos é logging?", deixo aqui os artigos anteriores para que fique por dentro (é de extrema importancia que leia os artigos anteriores a esse, para que tenha maior compreensão do que iremos fazer aqui).

  1. Amostragem generalizada sobre logging, em python

  2. Handlers

  3. Formatters

E a parte 4 dessa serie de artigos sobre logging será esse que você esta lendo, onde iremos parametrizar todas as configurações de nosso logging em um arquivo especifico, para que fique tudo organizado.

Para começar, crie uma pasta na qual ira comportar os itens desse artigo, dê o nome que preferir a ela e após isso crie um arquivo app.py (dê o nome que preferir também).

Comece importando nosso modo de logs:

import logging
Enter fullscreen mode Exit fullscreen mode

Por enquanto vamos deixar o arquivo app.py dessa forma e vamos criar outro arquivo chamado config.ini (também sinta-se a vontade para escolher o nome que desejar). É nesse arquivo que iremos adicionar nossas configurações.

Para que você entenda brevemente do que se trata, o arquivo com extensão .ini é divido em sessões que possuem propriedades, é muito útil para arquivos de configuração que não necessitam de muita complexidade. Segue a formatação de um arquivo de configuração desse tipo:

; Isso é um comentario

; As propriedades basicas de um arquivo desse tipo são as propriedades e essas contém um nome e um valor
nome=valor

; O arquivo, também pode ser divido por sessões, para que fique melhor organizado
[sessão]
nome=valor
Enter fullscreen mode Exit fullscreen mode

Dito tudo isso, podemos começar a configurar o arquivo do nosso sistema de logs. Dentro do arquivo que criamos, vamos adicionar as seguintes sessões e propriedade:

[loggers]
; Por padrão o logger root ja é chamado pelo módulo logging, mas iremos deixar isso explicito
keys = root

[handlers]
; Aqui definimos o modo como nosso log irá operar
keys = FileHandler

[formatters]
; E aqui será o nosso formatador
; O formatador também ficara dentro desse arquivo
keys = simpleFormatter

; Aqui definiremos as configurações do nosso logger root
[logger_root]
; Indicamos o level de DEBUG apenas
level = DEBUG
; Especificamos o nome do logger que iremos atuar
qualname = root
; E dizemos que será um logger de arquivo
handlers = FileHandler

; propriedades do nosso arquivo de log
[handler_FileHandler]
; Especificamos a nossa classe
class = FileHandler
; O formatador
formatter = simpleFormatter
; Aqui definimos o nome e o modo de escrita 
args = ('LOG.log', 'w')
; write / w = sobrescreve o arquivo sempre que gera um log novo
; append / a (padrão) = agrupa todos os logs sem apagar o anterior

; Por ultimo, mas não menos importante
; Definiremos como irá atuar nossa string de formatação
[formatter_simpleFormatter]
format = Data/Hora: %(asctime)s | level: %(levelname)s | file: %(filename)s | mensagem: %(message)s
Enter fullscreen mode Exit fullscreen mode

Como pode ver, deixei tudo comentado conforme fui decorrendo o arquivo, acredito que ficará mais facil de compreender, ao inves de dividir a explicação por partes.

Com o arquivo de configuração pronto, vamos voltar a app.py e terminar de escrever nosso codigo. Nós tinhamos acabado de importar nosso módulo, então vamos dar continuidade implementando as seguintes linhas:

# Além de importar o módulo logging
# Iremos importar outro modulo, chamado config
import logging.config

# Logo abaixo definiremos o arquivo de configuração
logging.config.fileConfig('config.ini')
Enter fullscreen mode Exit fullscreen mode

Para um breve entendimento...

Ao importarmos logging.config abrimos um leque de possibilidades, quando se trata de configurações de log. Dentre o métodos de configuração, escolhemos o fileConfig ja que estamos trabalhando com um arquivo de configuração, mas o módulo carrega com si outras opções, como dictConfig que obtém a configuração de log atravéz de um dicionário, contamos também com a opção listen que inicia um servidor de soquete na porta especificada e escuta as novas configurações.

Dito isso, vamos finalizar nosso script adicionando as seguintes linhas:

# definido a instancia do objeto getLogger()
logger = logging.getLogger()
# Gerando log
logger.info('teste')
Enter fullscreen mode Exit fullscreen mode

Nosso arquivo app.py completo ficará assim:

import logging
# Além de importar o módulo logging
# Iremos importar outro módulo, chamado config
import logging.config

# Logo abaixo definiremos o arquivo de configuração
logging.config.fileConfig('config.ini')

# definido a instancia do objeto getLogger()
logger = logging.getLogger()
# Gerando log
logger.info('teste')
Enter fullscreen mode Exit fullscreen mode

Agora, podemos executar nosso codigo. Digite no terminal:

python app.py
Enter fullscreen mode Exit fullscreen mode

Após rodar o script, veremos que foi gerado o arquivo LOG.log com a seguinte mensagem dentro:

Data/Hora: 2021-01-14 12:39:34,687 | level: INFO | file: app.py | mensagem: teste
Enter fullscreen mode Exit fullscreen mode

Conclusão

Talvez, esse artigo tenha ficado maior do que os anteriores e um pouco mais maçante, mas isso foi necessário para que obtivéssemos um melhor entendimento do que fizemos. Agora você ja conseguirá criar um gerador de logs mais "encorpado" e mais facil de ser mantido futuramente, pois segue a ideia da documentação oficial.

Top comments (0)