SPB Git
2.4 KB · 80 lines python
1# ============================================================2# Project: EDGAR Research Database3# Description: SEC EDGAR Research Infrastructure4#5# Authors:6# - Manel Kammoun — manel.kammoun@uqo.ca7# - Djerrycharli Tandjambianda — djerrycharli.tandjambianda@uqo.ca8# - Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca9#10# Institution:11# Université du Québec en Outaouais (UQO)12#13# License:14# Research / Academic Use15# ============================================================1617from __future__ import annotations1819import json20import logging21import os22import sys23from datetime import datetime, timezone24from pathlib import Path252627class JsonFormatter(logging.Formatter):28    def format(self, record: logging.LogRecord) -> str:29        log_entry = {30            "timestamp": datetime.now(timezone.utc).isoformat(),31            "level": record.levelname,32            "logger": record.name,33            "message": record.getMessage(),34        }35        if record.exc_info and record.exc_info[1]:36            log_entry["exception"] = self.formatException(record.exc_info)37        for key in ("filing", "cik", "accession", "form_type", "step"):38            val = getattr(record, key, None)39            if val is not None:40                log_entry[key] = val41        return json.dumps(log_entry)424344def setup_logging(45    name: str = "edgar",46    level: str | None = None,47    log_dir: Path | None = None,48    log_format: str | None = None,49) -> logging.Logger:50    level = level or os.environ.get("LOG_LEVEL", "INFO")51    log_format = log_format or os.environ.get("LOG_FORMAT", "text")5253    logger = logging.getLogger(name)54    logger.setLevel(getattr(logging, level.upper(), logging.INFO))5556    if logger.handlers:57        return logger5859    console = logging.StreamHandler(sys.stdout)60    if log_format == "json":61        console.setFormatter(JsonFormatter())62    else:63        console.setFormatter(64            logging.Formatter("%(asctime)s [%(levelname)-8s] %(name)s — %(message)s")65        )66    logger.addHandler(console)6768    if log_dir:69        log_dir.mkdir(parents=True, exist_ok=True)70        today = datetime.now().strftime("%Y-%m-%d")71        file_handler = logging.FileHandler(log_dir / f"{name}_{today}.log")72        file_handler.setFormatter(JsonFormatter())73        logger.addHandler(file_handler)7475    return logger767778def get_logger(name: str) -> logging.Logger:79    return logging.getLogger(f"edgar.{name}")80
Files · d70086876dc850d656db6f2b5479285154352ae8
Menu

Theme