Pacote de logging para uso interno da empresa, proporcionando uma interface de log simples e direta. Suporta gravação de logs em arquivos, saída padrão de erro (stderr) e integração com o Kafka para distribuição em um ambiente de mensageria. Configurável para diferentes ambientes como desenvolvimento e produção através de arquivos JSON.
Foi necessario a utilização do codigo a baixo para compatibilizar o kafka-python 2.0.2 para Python 3.12. Quando for atualizado o kafka-python deverá ser avaliado se a solução ainda é necessaria.
# Compatibilidade kafka-python 2.0.2 para Python 3.12
import six
if sys.version_info >= (3, 12, 0):
sys.modules['kafka.vendor.six.moves'] = six.moves
from kafka import KafkaProducer
Para instalar o pacote diretamente do repositório Git, use o Poetry:
poetry add git+https://github.com/moniari/moniari-log.git
O pacote Moniari-Log utiliza um arquivo de configuração JSON para definir as opções de logging. Exemplos de arquivos de configuração (dev.json e prod.json) são fornecidos na pasta config do projeto.
{
"log": {
"log_file": "logs/data_transfer.log",
"log_to_file": true,
"log_to_kafka": false,
"kafka_bootstrap_servers": [
"localhost:9092"
],
"kafka_topic": "logs"
}
}
{
"log": {
"log_file": "logs/data_transfer.log",
"log_to_file": true,
"log_to_kafka": true,
"kafka_bootstrap_servers": [
"localhost:9092"
],
"kafka_topic": "logs"
}
}
Para configurar o Moniari-Log globalmente no seu projeto, você pode utilizar a classe LoggerConfig definida no arquivo log_setup.py. Essa classe facilita a configuração e inicialização do logger em diferentes ambientes.
from pathlib import Path
from moniari_log import MoniariLog
class LoggerConfig:
def __init__(self, config_file: str = "config/dev.json"):
"""
Inicializa a configuração do logger com o caminho do arquivo de configuração especificado.
Parâmetros:
config_file (str): Caminho relativo para o arquivo de configuração.
"""
# Obtenha o diretório atual de trabalho
current_working_directory = Path.cwd()
# Construa o caminho absoluto para o arquivo de configuração baseado no cwd
self.config_file_path = current_working_directory / config_file
self.logger = self.setup_logger()
def setup_logger(self) -> MoniariLog:
"""
Configura e retorna o logger MoniariLog.
Retorna:
MoniariLog: Instância configurada do logger.
"""
logger = MoniariLog(config_file=str(self.config_file_path))
logger.debug(f"Logger configurado com o arquivo: {self.config_file_path}")
return logger
# Instancia e configura o logger para uso global
logger = LoggerConfig().logger
Após configurar o logger globalmente com log_setup.py, você pode utilizá-lo em qualquer lugar do seu projeto da seguinte forma:
from log_setup import logger
# Usa o logger para registrar mensagens
logger.info("This is an info message from my new project")
logger.error("This is an error message from my new project")
Você pode substituir as configurações do arquivo JSON com variáveis de ambiente. As variáveis de ambiente têm prioridade sobre as configurações do arquivo JSON.
LOG_TO_FILE
: Define se o log deve ser escrito em arquivo (true
oufalse
).LOG_FILE
: Caminho para o arquivo de log.LOG_TO_KAFKA
: Define se o log deve ser enviado para o Kafka (true
oufalse
).KAFKA_BOOTSTRAP_SERVERS
: Lista de servidores Kafka.KAFKA_TOPIC
: Tópico Kafka para envio dos logs.LOG_TO_STDERR
: Define se o log deve ser enviado para stderr (true
oufalse
).
export LOG_TO_FILE=true
export LOG_FILE="logs/data_transfer.log"
export LOG_TO_KAFKA=false
export KAFKA_BOOTSTRAP_SERVERS="localhost:9092"
export KAFKA_TOPIC="logs"
export LOG_TO_STDERR=true
Para executar os testes, utilize o comando:
poetry run python -m unittest discover -s tests
Isso irá descobrir e executar todos os testes na pasta tests.