Fundamentos do módulo logging
Configure registradores, defina níveis e emita mensagens corretamente.
Fundamentos do módulo logging é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Por que usar o registro de eventos em vez de print?
O módulo logging fornece níveis de gravidade, destinos de saída configuráveis, marcas de data e hora e a possibilidade de silenciar a saída sem alterar o código.
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")Níveis de registro
O Python define cinco níveis padrão em ordem crescente de gravidade: DEBUG, INFO, WARNING, ERROR, CRITICAL. Somente as mensagens no nível configurado ou acima dele são emitidas.
import logging
# Numeric values:
# DEBUG = 10
# INFO = 20
# WARNING = 30
# ERROR = 40
# CRITICAL = 50
logging.basicConfig(level=logging.WARNING)
logging.debug("hidden") # not shown
logging.warning("shown") # shownObtendo um logger
Use logging.getLogger(__name__) em cada módulo. Isso cria uma hierarquia que corresponde à estrutura dos módulos.
import logging
logger = logging.getLogger(__name__)
def process(data):
logger.info("Processing %d items", len(data))
return [x * 2 for x in data]Opções de basicConfig
basicConfig configura rapidamente o logger raiz. Argumentos nomeados comuns: level, format, filename, filemode.
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s — %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)Campos do formato de registro
Principais campos de formato: %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s, %(lineno)d.
import logging
fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")Registrando exceções
Use logger.exception() dentro de um bloco except para registrar a mensagem E o rastreamento completo da pilha.
import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Division failed")
# Logs message + traceback automaticallyContexto adicional com extra=
Passe um dict como extra= para adicionar campos personalizados ao registro.
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(
format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})Formatação tardia de texto
Passe os argumentos de formato separadamente — não formate as strings antecipadamente. Isso evita o custo de criar a string quando a mensagem é filtrada.
import logging
logger = logging.getLogger(__name__)
# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")
# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))Desativando o registro de eventos
Chame logging.disable(level) para suprimir globalmente todas as mensagens até esse nível — algo útil em testes.
import logging
logging.disable(logging.CRITICAL) # suppress everything
# All log calls now silently do nothing
logging.disable(logging.NOTSET) # re-enableHierarquia de loggers
Os nomes dos loggers usam pontos como separadores. Os loggers filhos propagam informações para os loggers pai, a menos que propagate=False.
import logging
parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")
# child propagates to parent by default
child.warning("DB slow") # also appears in myapp's handlersO logger raiz
O logger raiz (de logging.warning() etc.) é o ancestral de todos os loggers. Configure-o com basicConfig ou adicionando manipuladores diretamente.
import logging
root = logging.getLogger() # root logger
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
root.addHandler(handler)Verificação rápida
Qual método de registro você deve usar dentro de um bloco except para incluir automaticamente o rastreamento completo da pilha?
Recapitulação
Use loggers nomeados com getLogger(__name__), configure-os por meio de basicConfig, passe argumentos de formato de maneira tardia e use logger.exception() para rastreamentos de erros. Os loggers formam uma hierarquia com raiz no logger raiz.
Perguntas Frequentes
A aula “Fundamentos do módulo logging” é grátis?
Sim — o texto completo de “Fundamentos do módulo logging” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Fundamentos do módulo logging”?
Configure registradores, defina níveis e emita mensagens corretamente. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Fundamentos do módulo logging”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos do módulo logging
- Manipuladores, formatadores e filtros
- Registro estruturado
- Depuração com pdb