SPB Git

spb/trouve-ka Public

Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com

Python 76.8% TypeScript 15.7% SQL 3.9% Shell 1.4% CSS 1.3% Dockerfile 0.7%
1.3 KB · 40 lines python
Raw Blame History
1# Trouve-KA — logging structuré JSON2# Author: Simon-Pierre Boucher3# Contact: contact@spboucher.ai45"""Logs structurés (JSON une ligne) avec contexte crawl_id/url_id/domain_id/worker_id."""67import json8import logging9import sys10import time11from typing import Any121314class JsonFormatter(logging.Formatter):15    def format(self, record: logging.LogRecord) -> str:16        payload: dict[str, Any] = {17            "ts": round(time.time(), 3),18            "level": record.levelname.lower(),19            "logger": record.name,20            "msg": record.getMessage(),21        }22        extra = getattr(record, "ctx", None)23        if isinstance(extra, dict):24            payload.update(extra)25        if record.exc_info and record.exc_info[0] is not None:26            payload["exc"] = self.formatException(record.exc_info)27        return json.dumps(payload, ensure_ascii=False, default=str)282930def get_logger(name: str) -> logging.Logger:31    """Retourne un logger JSON prêt à l'emploi. Utiliser `log.info("msg", extra={"ctx": {...}})`."""32    logger = logging.getLogger(name)33    if not logger.handlers:34        handler = logging.StreamHandler(sys.stdout)35        handler.setFormatter(JsonFormatter())36        logger.addHandler(handler)37        logger.setLevel(logging.INFO)38        logger.propagate = False39    return logger40