Files
veye-lalwa/pipeline/journal.py
T
Cyber MawonajandClaude Opus 5 31d3935bce Phase 1 : socle Python, schéma SQLite + FTS5, modèles pydantic
- pyproject/uv sur Python 3.12, dépendances épinglées
- migrations versionnées (PRAGMA user_version) ; 001_initial pose textes,
  sources, evenements, decisions_cc, insights, veille_log, veille_changements
- index FTS5 à contenu externe, tokenizer unicode61 remove_diacritics 2 :
  « chlordecone » retrouve « chlordécone », highlight() disponible
- vue v_textes : devant_cc combine le statut et les affaires CC en instance,
  ce qui réconcilie le §7 (Riposte reste adoptee_non_promulguee) et le §8.7
  (la facette saisie_cc doit remonter ≥ 7 textes)
- modèles pydantic refusant les incohérences de statut : promulguée sans
  numéro, navette avec numéro officiel, slug malformé
- Makefile, .env.example, journalisation structlog

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 17:49:11 -04:00

40 lines
1.2 KiB
Python

"""Journalisation structurée du pipeline.
Sortie lisible en console pour les exécutions manuelles, JSON lorsque la sortie
n'est pas un terminal (systemd, redirections) afin que `journalctl` reste
exploitable.
"""
from __future__ import annotations
import logging
import sys
import structlog
def configurer(niveau: str = "INFO") -> None:
"""Configure structlog une fois pour toute l'exécution."""
logging.basicConfig(format="%(message)s", stream=sys.stdout, level=niveau)
processeurs: list = [
structlog.contextvars.merge_contextvars,
structlog.processors.add_log_level,
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S", utc=False),
]
if sys.stdout.isatty():
processeurs.append(structlog.dev.ConsoleRenderer(colors=True))
else:
processeurs.append(structlog.processors.JSONRenderer(ensure_ascii=False))
structlog.configure(
processors=processeurs,
wrapper_class=structlog.make_filtering_bound_logger(getattr(logging, niveau)),
logger_factory=structlog.PrintLoggerFactory(),
cache_logger_on_first_use=True,
)
def logger(nom: str) -> structlog.stdlib.BoundLogger:
return structlog.get_logger(nom)