DEV Community

Cover image for Gerando Logs com python
DrxwHe4rt
DrxwHe4rt

Posted on

Gerando Logs com python

Nesse artigo, iremos trabalhar com a geração de logs em python, utilizando o módulo logging.

Retirado da documentação oficial do python: "Este módulo define funções e classes que implementam um sistema de registro de eventos flexível para aplicativos e bibliotecas."

O que a descrição acima quer dizer?

  • Bem, imagine o seguinte cenário: Temos uma função que realiza retorna o nome completo de uma pessoa, os parâmetros dessa função são primeiro_nome e ultimo_nome, ambos aceitam strings como entrada, mas imagine que, por um motivo de força maior (pense nessa situação como algo para mérito de compreensão) a entrada seja do tipo booleano (True/False), nesse caso teríamos um erro e gostaríamos que o sistema reportasse essa mensagem de erro para nós. E é para isso, que temos esse módulo no python.

Vamos abordar o exemplo acima de forma pratica

  1. Crie uma pasta para armazenar nosso codigo;
  2. Crie um arquivo chamado app.py.

Dentro do nosso arquivo app.py iremos importar o módulo logging:

import logging
Enter fullscreen mode Exit fullscreen mode

Feito isso, iremos definir a formatação do nosso log:

'''
   A formatação abaixo permite personalizarmos
   a forma como o log será mostrado para nós.
'''
# DateTime:Level:Arquivo:Mensagem
log_format = '%(asctime)s:%(levelname)s:%(filename)s:%(message)s'
Enter fullscreen mode Exit fullscreen mode

Em seguida, definiremos as configurações do log e sua instancia:

'''
   Aqui definimos as configurações do modulo.

   filename = 'nome do arquivo em que vamos salvar a mensagem do log.'
   filemode = 'É a forma em que o arquivo será gravado.'
   level = 'Level em que o log atuará'
   format = 'Formatação da mensagem do log'
'''
logging.basicConfig(filename='exemplo.log',
                    # w -> sobrescreve o arquivo a cada log
                    # a -> não sobrescreve o arquivo
                    filemode='w',
                    level=logging.DEBUG,
                    format=log_format)

'''
   O objeto getLogger() permite que retornemos
   varias instancias de logs.
'''
# Instancia do objeto getLogger()
logger = logging.getLogger('root')
Enter fullscreen mode Exit fullscreen mode
  • O módulo contém varios tipos de niveis de mensagens:

Level

Numeric value

CRITICAL

50

ERROR

40

WARNING

30

INFO

20

DEBUG

10

NOTSET

0

Até aqui definimos as configurações do nosso log, agora vamos colocar isso tudo em pratica, de fato.

Vamos fazer uma função que receba o primeiro_nome e o segundo_nome de uma pessoa e retorne o log dessa função no nosso arquivo exemplo.log (definido logo acima):

def add(primeiro_nome: str, segundo_nome: str) -> str:
    """
        Essa função recebe o primeiro nome e o segundo nome de uma pessoa e retorna o nome completo dela.
    """

    # Aqui, verificamos se os parametros passados são do tipo string (str)
    if isinstance(primeiro_nome, str) and isinstance(segundo_nome, str):
        logger.info(f'{primeiro_nome} {segundo_nome}')
        return primeiro_nome + segundo_nome
    else:
        logger.error(
            f'{primeiro_nome} type: {type(primeiro_nome)} - {segundo_nome} type: {type(segundo_nome)}'
        )
Enter fullscreen mode Exit fullscreen mode

Segue nosso codigo completo:

import logging


'''
   A formatação abaixo permite personalizarmos
   a forma como o log será mostrado para nós.
'''
# DateTime:Level:Arquivo:Mensagem
log_format = '%(asctime)s:%(levelname)s:%(filename)s:%(message)s'
'''
   Aqui definimos as configurações do modulo.

   filename = 'nome do arquivo em que vamos salvar a mensagem do log.'
   filemode = 'É a forma em que o arquivo será gravado.'
   level = 'Level em que o log atuará'
   format = 'Formatação da mensagem do log'
'''
logging.basicConfig(filename='exemplo.log',
                    # w -> sobrescreve o arquivo a cada log
                    # a -> não sobrescreve o arquivo
                    filemode='w',
                    level=logging.DEBUG,
                    format=log_format)

'''
   O objeto getLogger() permite que retornemos
   varias instancias de logs.
'''
# Instancia do objeto getLogger()
logger = logging.getLogger('root')

def fullname(primeiro_nome: str, segundo_nome: str) -> str:
    """
        Essa função recebe o primeiro nome e o segundo nome de uma pessoa e retorna o nome completo dela.
    """

    # Aqui, verificamos se os parametros passados são do tipo string (str)
    if isinstance(primeiro_nome, str) and isinstance(segundo_nome, str):
        logger.info(f'{primeiro_nome} {segundo_nome}')
        return primeiro_nome + segundo_nome
    else:
        logger.error(
            f'{primeiro_nome} type: {type(primeiro_nome)} - {segundo_nome} type: {type(segundo_nome)}'
        )

fullname('Wendrew', 'Oliveira')
fullname('Wendrew', True)
Enter fullscreen mode Exit fullscreen mode

O retorno desse codigo ficará dentro do arquivo exemplo.log no mesmo caminho do arquivo app.py e terá a seguinte forma:

log

Esse é o modo mais convencional de retorno de mensagens aos desenvolvedores, quando o sistema ja esta em produção

Top comments (0)