Download app/utils/logger.py from amos-fernandes/DeepFin: direct link, hf CLI and curl.
- Browser
- Download file 1.62 kB
-
https://huggingface.co/amos-fernandes/DeepFin/resolve/main/app/utils/logger.py
- Command line
-
hf download hf://amos-fernandes/DeepFin/app/utils/logger.py
-
curl -L -o logger.py https://huggingface.co/amos-fernandes/DeepFin/resolve/main/app/utils/logger.py
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 | |