DeepFin / app /utils /logger.py
Amós e Souza Fernandes
Upload 120 files
5f10e37 verified
Raw History Blame Contribute Delete
1.62 kB
import logging
import logging.handlers
import json
import os
import sys
from datetime import datetime
from dotenv import load_dotenv
load_dotenv()
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper()
LOG_DIR = "logs"
LOG_FILE = f"{LOG_DIR}/atcoin_{datetime.utcnow().strftime('%Y-%m-%d')}.log"
class JsonFormatter(logging.Formatter):
def format(self, record):
log_record = {
"timestamp": datetime.utcnow().isoformat(),
"level": record.levelname,
"message": record.getMessage(),
"name": record.name,
"module": record.module,
"function": record.funcName,
"line": record.lineno,
}
return json.dumps(log_record)
def get_logger(name: str = "atcoin"):
logger = logging.getLogger(name)
logger.setLevel(LOG_LEVEL)
formatter = JsonFormatter()
# Evita múltiplos handlers duplicados
if not logger.handlers:
try:
os.makedirs(LOG_DIR, exist_ok=True)
file_handler = logging.handlers.TimedRotatingFileHandler(
LOG_FILE, when="midnight", backupCount=7, encoding="utf-8"
)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
except Exception as e:
# Fallback para stderr
stream_handler = logging.StreamHandler(sys.stderr)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.warning(f"Falha ao configurar arquivo de log: {e}")
return logger