Blog

Postado em em 8 de outubro de 2022

Logging em Python – Histórico de Informações do Código

Você sabe o que é logging em Python? Nessa aula eu vou te mostrar como isso vai te ajudar nos seus programas.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Logging em Python

Você sabe o que é loggin? O que é log? Ou até mesmo como criar logs dos seus programas? Então está no lugar certo!

Hoje eu vou te explicar como fazer a criação de logs para programas e qual a importância de um log, assim como os benefícios do log nos seus códigos!

Biblioteca Logging

Antes de falar da biblioteca em si, geralmente nos códigos que usamos aqui no blog ou no nosso canal do YouTube você vai notar que nós utilizamos o comando print para conseguir visualizar alguns resultados.

import logging

logging.basicConfig(level=logging.INFO, filename="programa.log", format="%(asctime)s - %(levelname)s - %(message)s")

def resultado_operacional(faturamento, custo):
    return faturamento - custo

def lucro_liquido(faturamento, custo, percentual_imposto):
    if percentual_imposto == 0:
        logging.warning("Percentual de imposto é 0, tá certo isso?")
    return (faturamento - custo) * (1 - percentual_imposto)

def lucro_por_acoes(faturamento, custo, percentual_imposto, acoes):
    if acoes == 0:
        logging.error("Ações não pode ser igual a 0")
    return lucro_liquido(faturamento, custo, percentual_imposto) / acoes

faturamento = 1000
custo = 400
percentual_imposto = 0.3
acoes = 0


resultado = resultado_operacional(faturamento, custo)
logging.info(f"Resultado: {resultado}")

lucro = lucro_liquido(faturamento, custo, percentual_imposto)
logging.info(f"Lucro: {lucro}")

lucro_acao = lucro_por_acoes(faturamento, custo, percentual_imposto, acoes)
logging.info(f"Lucro por ação: {lucro_acao}")

O código que nós vamos usar como exemplo é esse aqui, agora na parte onde vamos mostrar os resultados em com as variáveis resultado, lucro e lucro_acao geralmente utilizamos o comando print.

Não é errado utilizar esse comando, mas é uma forma mais simples de verificar se as informações estão corretas e se estão de acordo com o esperado.

Em códigos menores e mais simples é muito fácil identificar se esses resultados estão corretos apenas com o print, só que quando temos códigos mais complexos e até mesmo mais arquivos para um projeto isso acaba ficando mais difícil de identificar.

Por isso a vantagem do log, pois você vai conseguir gerar um histórico de informações, ou seja, um histórico de execução do programa para verificar se está tudo ok.

Então quando temos um código pequeno e ocorre algum erro é muito mais fácil de identificar onde está esse erro, mas quando temos códigos mais complexos e o uso de mais arquivos isso de torna mais difícil.

Por esse motivo é que utilizamos o log, para poder facilitar essas análises e corrigir esses problemas.

Lembrando que você pode acessar a documentação dessa biblioteca sempre que quiser e tiver alguma dúvida:

https://docs.python.org/3/library/logging.html#logrecord-attributes

Quando você rodar esse código pela primeira vez já vai receber um erro de que você tem uma divisão por zero, pois o número de ações está igual a 0.

Isso por padrão o editor de Python já vai te mostrar, mas se você observar no nosso código, nós temos o logging.error e o loging.warning.

Vamos a um breve resumo do que é cada um desses para que fique mais claro como vamos utilizar cada um deles.

  • logging.debug DEBUG – Informação detalhada, tipicamente de interesse apenas quando diagnosticando problemas.
  • logging.info INFO – Confirmação de que as coisas estão funcionando como esperado.
  • logging.warning WARNING – Uma indicação que algo inesperado aconteceu, ou um indicativo que algum problema em um futuro próximo (ex.: ‘pouco espaço em disco’). O software está ainda funcionando como esperado.
  • logging.error ERROR – Por conta de um problema mais grave, o software não conseguiu executar alguma função.
  • logging.critical CRITICAL – Um erro grave, indicando que o programa pode não conseguir continuar rodando.

Então você pode definir as mensagens de erro e warning (aviso) para o seu código para que fique mais fácil identificar os erros ou avisos.

Dentro da parte do cálculo de lucro nós colocamos um erro onde o valor das ações não pode ser igual a 0, e isso é um erro, pois não podemos dividir por 0.

Já dentro do cálculo de lucro líquido colocamos um aviso caso o percentual de imposto seja igual a 0. Não é errado, mas não é algo comum de acontecer, então ficaria só como um aviso.

Com isso podemos utilizar o logging.info para verificar se cada uma das variáveis está funcionando como deveria.

Para finalizar antes de te mostrar o resultado, você deve ter notado a linha de código abaixo:

logging.basicConfig(level=logging.INFO, filename="programa.log", format="%(asctime)s - %(levelname)s - %(message)s")

Essa linha de Código vai permitir a criação de um arquivo para que você consiga ter esse registro/histórico de informações do seu programa em um arquivo de texto já com data, hora e quais foram as informações, erros e avisos que tivemos na execução do programa.

Histórico de informações do código
Histórico de informações do código

Nessa imagem temos a execução do programa com o valor de ações igual a 0 e depois nós temos a execução com o imposto igual a 0.

Então fica muito mais fácil entender e identificar onde temos apenas uma informação, onde temos um erro e onde temos um aviso.

Lembrando que um aviso pode ser apenas para indicar que algo pode ou não estar correto, mas não vai atrapalhar na execução do código.

O erro já vai parar o código no local onde ocorreu o erro, então é onde temos que verificar o que aconteceu.

Outro ponto bem interessante é que você pode colocar esses pontos de aviso e erro no seu código, o que vai facilitar muito a descobrir onde temos um erro ou um aviso.

Então quando estiver escrevendo o código você já pode identificar esses pontos onde possivelmente pode ter um erro ou talvez um aviso e já fazer um logging.warning ou logging.error para identificar melhor quando acontecer um erro.

OBS: Novamente vale ressaltar que todas essas informações ficam disponíveis na documentação da biblioteca logging, que é uma biblioteca padrão do Python. Então basta consultar que tem até mais informações do que estamos passando aqui!

Conclusão – Logging em Python

Nessa aula eu te mostrei uma breve introdução ao logging para que você saiba outras maneiras de verificar seus resultados dentro do código de uma forma mais detalhada.

Principalmente quando tem um código maior e complexo, pois em códigos pequenos o comando print geralmente já resolve, pois você consegue verificar o resultado e já identificar se tem um problema ou não.

Em códigos grandes e complexos você vai ver como o log é muito eficiente e facilita muito na identificação de erros, principalmente quando coloca essas mensagens de erro e avisos!

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!