Skip to main content

Biblioteca de logging estruturado para Python

Project description

py_safelogger

Biblioteca de logging estruturado, flexível e extensível para Python, oferecendo uma solução simplificada para configuração e integração de logs em projetos de todos os tamanhos.

Instalação

pip install py_safelogger

Estrutura do Projeto

A biblioteca está organizada de forma modular para facilitar a manutenção e extensão:

py_safelogger/
├── src/
│   ├── filters/           # Filtros para manipulação de logs
│   │   └── redact.py      # Filtro para redação de dados sensíveis
│   ├── handlers/          # Manipuladores de destino para logs
│   │   └── cloud.py       # Handler para envio de logs para endpoints HTTP
│   ├── utils/             # Funções utilitárias
│   │   └── config.py      # Utilitários para carregamento de configurações
│   ├── structlog_support.py # Integração com structlog
│   └── safelogger.py     # Módulo principal e API pública
└── tests/
    └── test_safelogger.py # Testes unitários e integração

API Pública

A biblioteca expõe as seguintes funções e classes principais:

  • configure_logging(): Configura o sistema de logging
  • get_traditional_logger(): Retorna um logger tradicional do Python
  • get_structlog_logger(): Retorna um logger structlog (se disponível)
  • RedactFilter: Filtro para redação de campos sensíveis
  • CloudLogHandler: Handler para envio de logs para endpoints HTTP (mock)

Exemplos de Uso

1. Configuração básica

from py_safelogger import configure_logging, get_traditional_logger
configure_logging(log_level="INFO")
logger = get_traditional_logger()
logger.info("Mensagem informativa", extra={"user_id": 123})

2. Logging estruturado com contexto (structlog)

from py_safelogger import configure_logging, get_structlog_logger
configure_logging(use_structlog=True)
logger = get_structlog_logger(user_id=42, role="admin")
logger.info("Usuário autenticado")

3. Logging de erros com stacktrace

try:
    1/0
except Exception:
    logger.exception("Erro de divisão")

4. Logging com redação de dados sensíveis (recursivo)

configure_logging(redact_fields=["password", "token"])
logger.info("Cadastro", extra={
    "email": "user@exemplo.com", 
    "password": "senha123", 
    "profile": {"password": "outra"}
})
# Saída: ... "password": "[REDACTED]" em todos os níveis

5. Logging com handler cloud (mock)

configure_logging(
    handlers=["console", "cloud"], 
    cloud_handler_config={"endpoint": "https://mock.log/api", "token": "abc"}
)
logger.info("Evento enviado para a nuvem", extra={"event": "login"})

6. Rotação de arquivos

# Rotação por tamanho
configure_logging(
    log_file="app.log", 
    rotation={"type": "size", "maxBytes": 1048576, "backupCount": 5}
)

# Rotação por tempo
configure_logging(
    log_file="app.log", 
    rotation={"type": "time", "when": "midnight", "interval": 1, "backupCount": 7}
)

7. Configuração via arquivo ou dicionário

# Via arquivo YAML
configure_logging(config_file="logging_config.yaml")

# Via dicionário
config = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {"default": {"format": "%(asctime)s %(levelname)s %(message)s"}},
    "handlers": {"console": {"class": "logging.StreamHandler", "formatter": "default"}},
    "root": {"level": "INFO", "handlers": ["console"]}
}
configure_logging(config_dict=config)

8. Configuração via variáveis de ambiente

# Defina as variáveis de ambiente
export LOG_ENV=production
export LOG_FORMAT=json
export LOG_LEVEL=WARNING
export LOG_FILE=/var/log/app.log

# No código, não precisa passar parâmetros
from py_safelogger import configure_logging
configure_logging()  # Carrega configuração das variáveis de ambiente

Segurança e Privacidade

  • O filtro de redação é recursivo e cobre campos sensíveis em estruturas aninhadas e JSON serializado
  • Para ambientes críticos (compliance, auditoria): recomenda-se integrar com soluções de logs imutáveis
  • A arquitetura permite integração com handlers externos para necessidades específicas de segurança

Cenários Indicados

  • Projetos de médio e grande porte que exigem:
    • Padronização de logging
    • Logging estruturado (JSON)
    • Proteção de dados sensíveis
    • Integração com sistemas de observabilidade
    • Rotação e múltiplos destinos de log
    • Extensibilidade via handlers e filtros customizados

Cenários Não Indicados

  • Scripts simples ou automações pequenas onde o logging padrão do Python já é suficiente
  • Ambientes que exigem logs imutáveis nativamente (sem integração com storage externo)
  • Projetos onde a simplicidade e o footprint mínimo são prioridade absoluta

Desenvolvimento e CI/CD

A biblioteca inclui uma pipeline GitHub Actions para automação de testes e publicação:

  • Execução de testes unitários e de integração
  • Relatório de cobertura de código (cobertura atual: 88%)
  • Build e publicação automática no PyPI quando uma nova tag é criada

Licença

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_safelogger-0.2.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_safelogger-0.2.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file py_safelogger-0.2.0.tar.gz.

File metadata

  • Download URL: py_safelogger-0.2.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.18

File hashes

Hashes for py_safelogger-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5657b1420c52e1ecd588aec03dc81ccd91f0f9347e6ebc4ab0dc615c12b689f1
MD5 f83d473871c9ce2f9d654ebf3f78dd00
BLAKE2b-256 8f9e16a68ba388cdad11df888f1294c4e13ad01b8768c76846f6dbdf6eecb50a

See more details on using hashes here.

File details

Details for the file py_safelogger-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: py_safelogger-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.18

File hashes

Hashes for py_safelogger-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 59bfaf33fe61451ca08a209ac165707ac4f13d848aac5daea04053e6aa709bc9
MD5 ebe1eaa2a1ae3010c38cae33dbf7e933
BLAKE2b-256 4af5d3a1d9a5ce2e81bae00df212f2999273871cffb856ddc3d5e0b503a616e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page