Manipuladores, formatadores e filtros
Direcione a saída dos registros para arquivos, fluxos e destinos personalizados.
Manipuladores, formatadores e filtros é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 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.
Manipuladores encaminham registros
Um manipulador envia registros para um destino: console, arquivo, endpoint HTTP etc. Um logger pode ter vários manipuladores.
import logging
logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
logger.addHandler(sh)
logger.info("Goes to console")StreamHandler
StreamHandler grava em um fluxo (por padrão, sys.stderr). Passe sys.stdout para obter saída em stdout.
import logging, sys
logger = logging.getLogger("out")
handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)
logger.warning("printed to stdout")FileHandler
FileHandler acrescenta registros a um arquivo. Use mode="w" para sobrescrever o arquivo a cada execução.
import logging
logging.basicConfig(
filename="app.log",
filemode="a",
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s"
)
logging.info("Persisted to disk")RotatingFileHandler
Gire automaticamente os arquivos de registro quando eles excederem um limite de tamanho, mantendo N arquivos de backup.
from logging.handlers import RotatingFileHandler
import logging
handler = RotatingFileHandler(
"app.log", maxBytes=1_000_000, backupCount=5
)
logging.getLogger().addHandler(handler)TimedRotatingFileHandler
Gire os arquivos de registro conforme uma programação — diariamente, semanalmente ou a cada hora —, uma opção ideal para serviços de longa duração.
from logging.handlers import TimedRotatingFileHandler
import logging
handler = TimedRotatingFileHandler(
"app.log", when="midnight", backupCount=7
)
logging.getLogger().addHandler(handler)Formatadores
Um Formatter controla o layout de texto de cada registro. Anexe-o a um manipulador com handler.setFormatter().
import logging
fmt = logging.Formatter(
fmt="%(asctime)s %(levelname)-8s %(name)s — %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S"
)
handler = logging.StreamHandler()
handler.setFormatter(fmt)
logging.getLogger().addHandler(handler)Filtragem no nível do manipulador
Cada manipulador tem seu próprio nível. Um registro precisa passar tanto pelo nível do logger quanto pelo nível do manipulador para ser emitido.
import logging
logger = logging.getLogger("app")
logger.setLevel(logging.DEBUG) # logger passes DEBUG+
err_handler = logging.FileHandler("errors.log")
err_handler.setLevel(logging.ERROR) # only ERROR+
logger.addHandler(err_handler)Filtros personalizados
Crie uma subclasse de logging.Filter e substitua filter(record) para aceitar ou rejeitar registros com base em qualquer critério.
import logging
class SensitiveFilter(logging.Filter):
def filter(self, record):
return "password" not in record.getMessage().lower()
handler = logging.StreamHandler()
handler.addFilter(SensitiveFilter())
logging.getLogger().addHandler(handler)Adicionando campos extras com um filtro
Os filtros também podem alterar o registro para inserir campos adicionais (por exemplo, um ID de solicitação) antes da formatação.
import logging
class RequestIDFilter(logging.Filter):
def __init__(self, request_id):
self.request_id = request_id
def filter(self, record):
record.request_id = self.request_id
return True
# fmt: "%(request_id)s %(message)s"Vários manipuladores em um logger
Adicione vários manipuladores para enviar os mesmos registros a vários destinos simultaneamente.
import logging
logger = logging.getLogger("multi")
logger.addHandler(logging.StreamHandler()) # console
logger.addHandler(logging.FileHandler("audit.log")) # file
logger.setLevel(logging.INFO)
logger.info("Both destinations receive this")Desativando a propagação
Defina logger.propagate = False para impedir que os registros subam até o logger raiz e sejam registrados duas vezes.
import logging
logger = logging.getLogger("mylib")
logger.propagate = False # stays here, does not reach root
logger.addHandler(logging.StreamHandler())Verificação rápida
Qual método anexa um Formatter a um Handler?
Recapitulação
Os manipuladores encaminham registros; os formatadores definem seu estilo; os filtros os deixam passar ou bloqueiam seletivamente. Use RotatingFileHandler para registros limitados por tamanho e TimedRotatingFileHandler para rotação baseada em datas.
Perguntas Frequentes
A aula “Manipuladores, formatadores e filtros” é grátis?
Sim — o texto completo de “Manipuladores, formatadores e filtros” é 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 “Manipuladores, formatadores e filtros”?
Direcione a saída dos registros para arquivos, fluxos e destinos personalizados. 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 2 de 4.
Quanto tempo leva a aula “Manipuladores, formatadores e filtros”?
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