Cliente assíncrono para envio de logs para a API DataWake
Project description
DataWake Logger
Cliente assíncrono em Python para envio de logs para a API DataWake.
🚀 Características
- ✅ Assíncrono: Não bloqueia a execução do seu código
- ✅ Fire and Forget: Os logs são enviados em background
- ✅ Context Manager: Gerenciamento automático de recursos
- ✅ Type Hints: Código totalmente tipado
- ✅ Configuração via .env: Suporte a variáveis de ambiente
- ✅ SSL Configurável: Funciona em ambientes de desenvolvimento e produção
📦 Instalação
pip install datawake-logger
Ou para instalação em modo de desenvolvimento:
pip install datawake-logger[dev]
🔧 Configuração
Usando Variáveis de Ambiente
Crie um arquivo .env na raiz do seu projeto:
LOG_API_URI=sua_uri
LOG_API_USER=seu_usuario
LOG_API_PASSWORD=sua_senha
SISTEMA_ORIGEM_LOG=nome_do_seu_sistema
USUARIO_LOG=identificador_usuario
Usando Configuração Direta
Você também pode configurar diretamente no código:
from datawake_logger import Logger, MessageLogger
logger = Logger(
uri="https://sua_url",
sistema="meu_sistema",
username="usuario_app",
api_user="api_user",
api_password="api_password",
cliente="meu_cliente"
)
📖 Uso Básico
Exemplo 1: Usando variáveis de ambiente
import asyncio
from datawake_logger import Logger, MessageLogger
async def main():
# Carrega configurações do .env automaticamente
async with Logger.from_env(cliente="MeuApp") as logger:
logger.log(
MessageLogger.INFO,
"Aplicação iniciada",
rotina="inicializacao",
output_print=True
)
logger.log(
MessageLogger.DEBUG,
"Processando dados",
rotina="processamento",
tabela="usuarios",
output_print=True
)
logger.log(
MessageLogger.ERROR,
"Erro ao conectar ao banco",
rotina="conexao_db",
output_print=True
)
if __name__ == "__main__":
asyncio.run(main())
Exemplo 2: Configuração manual
import asyncio
from datawake_logger import Logger, MessageLogger
async def main():
async with Logger(
uri="sua_uri",
sistema="meu_sistema",
username="usuario_app",
api_user="api_user",
api_password="api_password",
cliente="meu_cliente",
ssl_verify=False # Apenas para desenvolvimento
) as logger:
logger.log(
MessageLogger.WARN,
"Processamento demorado detectado",
rotina="etl_process",
tabela="sales_data",
output_print=True
)
if __name__ == "__main__":
asyncio.run(main())
Exemplo 3: Integração com PySpark
from pyspark.sql import SparkSession
from datawake_logger import Logger, MessageLogger
import asyncio
async def process_spark_job():
spark = SparkSession.builder.appName("ETL").getOrCreate()
async with Logger.from_env(cliente="SparkETL") as logger:
logger.log(
MessageLogger.INFO,
"Iniciando job Spark",
rotina="spark_etl",
output_print=True
)
try:
# Seu código Spark aqui
df = spark.read.parquet("s3://bucket/data")
logger.log(
MessageLogger.INFO,
f"Lidos {df.count()} registros",
rotina="spark_etl",
tabela="raw_data",
output_print=True
)
except Exception as e:
logger.log(
MessageLogger.ERROR,
f"Erro no job: {str(e)}",
rotina="spark_etl",
output_print=True
)
raise
if __name__ == "__main__":
asyncio.run(process_spark_job())
📊 Níveis de Log
A biblioteca suporta 5 níveis de log:
MessageLogger.INFO- Informações geraisMessageLogger.DEBUG- Informações de debugMessageLogger.WARN- AvisosMessageLogger.ERROR- ErrosMessageLogger.AVISO- Avisos especiais
🔍 Parâmetros do Método log()
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
level |
MessageLogger |
✅ Sim | Nível do log |
mensagem |
str |
✅ Sim | Mensagem a ser logada |
rotina |
str |
❌ Não | Nome da rotina em execução |
tabela |
str |
❌ Não | Nome da tabela do banco de dados |
topico |
str |
❌ Não | Nome do tópico Kafka |
op |
str |
❌ Não | Ordem de produção |
unidade_producao |
str |
❌ Não | Unidade de produção |
output_print |
bool |
❌ Não | Imprimir no console (padrão: False) |
🎯 Recursos Avançados
Hash ID Único
Cada instância do Logger gera um hash ID único de 128 bits que é automaticamente anexado a todas as mensagens, permitindo rastrear logs da mesma sessão.
Gerenciamento de Tarefas
O Logger mantém controle de todas as tarefas assíncronas pendentes e garante que todas sejam finalizadas antes de fechar a sessão.
SSL Configurável
Para ambientes de desenvolvimento, você pode desabilitar a verificação SSL:
async with Logger.from_env(
cliente="DevApp",
ssl_verify=False # Desabilita verificação SSL
) as logger:
# seu código aqui
pass
🧪 Testes
Execute os testes com:
pytest tests/
Com cobertura:
pytest --cov=datawake_logger tests/
🤝 Contribuindo
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
📝 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
👥 Autores
- DataWake Team - contato@datawake.cloud
🐛 Reportar Problemas
Encontrou um bug? Abra uma issue
📚 Documentação Adicional
Para mais informações sobre a API DataWake, consulte a documentação oficial em https://docs.datawake.cloud
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file datawake_logger-1.0.1.tar.gz.
File metadata
- Download URL: datawake_logger-1.0.1.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a044ab8a3f7051a3743672cdf603b1614140bcf8e6df4b7ea236025425e7d200
|
|
| MD5 |
8b5c3761d0614af0fb7bc54ea562c3a3
|
|
| BLAKE2b-256 |
ae2e8b1a492404d0e90a2a1d7445a6523d55bff02196e0c2be059ad2bf6cdd98
|
File details
Details for the file datawake_logger-1.0.1-py3-none-any.whl.
File metadata
- Download URL: datawake_logger-1.0.1-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9fa7487786a021a493db23d53d441a383ec21d87eeb922caff2476a30baf770c
|
|
| MD5 |
66691ecbd46efc30a0ba6055e74a0935
|
|
| BLAKE2b-256 |
deedbed46cbbe9b92e01083de4bae9eca61ffa8436a1d77d217806834a1a6ca3
|