Para gerenciar log em Python utilizamos o módulo logging. Esse contém métodos/funções para configurar e exibir mensagem de erro, informação, debug e outros.

Sintaxe
import logging
Sintaxe
logging.nome_método(mensagem)

Para exibir ou logar as mensagens o módulo fornece os métodos abaixo:

Métodos
debug: mensagem de debug
info: messagem de informação
warning: messagem de aviso
error: messagem de error
critical: messagem crítica
Exemplo 1
import logging

logging.warning("messagem de aviso")
logging.error("messagem de error")
logging.critical("messagem de crítica")
Saída
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

Para configurar o nível ao qual as mensagens devem ser exibidas, o método basicConfig é utilizado. Esse método recebe um level de mensagem como argumento que informa a partir de qual nível as mensagens devem ser exibidas.

Sintaxe
logging.basicConfig(level)
Nível: Prioridade
logging.DEBUG: 10
logging.INFO: 20
logging.WARNING: 30 (padrão)
logging.ERROR: 40
logging.CRITICAL: 50
Exemplo 2
import logging

logging.basicConfig(level=logging.WARNING)

logging.debug("mensagem de debug") #não exibida 
logging.info("mensagem de informação")#não exibida
logging.warning("mensagem de aviso")
logging.error("mensagem de erro")
logging.critical("mensagem de crítica")
Saída
WARNING:root:mensagem de aviso
ERROR:root:mensagem de erro
CRITICAL:root:mensagem de crítica

Além da exibição das mensagem utilizando os método acima, essas mensagens podem ser formatadas para exibição de data, linha de código, nome do arquivo entre outros:

Sintaxe
logging.basicConfig(format={formato=valor,...})

Os tipos de dados passados como argumento como variavel devem substituir os tipos de dado de parâmetros e retorno:

format:
name: nome do logger
message: mensagem do log
levelname: nome do nível
asctime: data no formato aaaa-mm-dd hh:mm:ss. 
filename: nome do arquivo
funcName: nome da função
lineno: número da linha
module: módulo
pathname: caminho completo
process: ID do processo
process-Name: nome do processo
Exemplo 3
import logging

logging.basicConfig(format="{name}:{message}:{levelname}", style="{")
logging.warning("mensagem de aviso")
Saída
root:mensagem de aviso:WARNING
Exemplo 4
import logging
logging.basicConfig(format="{pathname}:{asctime}:{message}:{levelname}", style="{")
logging.warning("mensagem de aviso")
Saída
/home/main.py:2025-04-23 17:36:32,631:mensagem de aviso:WARNING
Exemplo 5
import logging

logging.basicConfig(format="{pathname}:{asctime}:{message}:{levelname}", style="{", datefmt="%d-%m-%Y %H:%M")
logging.warning("mensagem de aviso")
Saída
/home/main.py:09-06-2025 14:07:mensagem de aviso:WARNING

Além da exibição das mensagens em uma saída padrão, essa saída pode ser configurada para um arquivo de log. Essa configuração é feita utilizando também a função basicConfig:

Onde
logging.basicConfig( filename="...",   encoding="...",  filemode="...")
Sintaxe
filename: nome do arquivo para log
encoding: codificação do arquivo de log
filemode: modo do arquivo. Para arquivo de log, usar "a" para append.
Exemplo 6
logging.basicConfig(filename="log.log", 
                    encoding="ascii",
                    filemode="a",
                    format="{name}:{message}:{levelname}", 
                    style="{")
logging.warning("mensagem de aviso")
Saída: log.log
root:mensagem de aviso:WARNING
  1. 09/06/2025 - versão inicial