68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
"""Configuration du log fichier de la GUI V6 (E1).
|
|
|
|
Sans ceci, la GUI frozen fenêtrée (sans console) perd ses logs de diagnostic.
|
|
Le log est posé dans le même répertoire applicatif que la licence
|
|
(``%LOCALAPPDATA%/Aivanov/Anonymisation``) pour faciliter sa récupération (E2/E3).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
from logging.handlers import RotatingFileHandler
|
|
from pathlib import Path
|
|
|
|
_CONFIGURED = False
|
|
|
|
|
|
def _app_data_dir() -> Path:
|
|
base = os.environ.get("LOCALAPPDATA")
|
|
if base:
|
|
root = Path(base)
|
|
else: # Linux/dev
|
|
root = Path.home() / ".local" / "share"
|
|
return root / "Aivanov" / "Anonymisation"
|
|
|
|
|
|
def log_file_path() -> Path:
|
|
return _app_data_dir() / "logs" / "anonymisation.log"
|
|
|
|
|
|
def setup_file_logging() -> Path:
|
|
"""Configure un handler fichier rotatif sur le logger racine. Idempotent."""
|
|
global _CONFIGURED
|
|
path = log_file_path()
|
|
if _CONFIGURED:
|
|
return path
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
handler = RotatingFileHandler(
|
|
str(path), maxBytes=2_000_000, backupCount=3, encoding="utf-8"
|
|
)
|
|
handler.setFormatter(
|
|
logging.Formatter("%(asctime)s %(levelname)s %(name)s: %(message)s")
|
|
)
|
|
root = logging.getLogger()
|
|
if root.level == logging.NOTSET:
|
|
root.setLevel(logging.INFO)
|
|
root.addHandler(handler)
|
|
# Best-effort : si le cœur utilise loguru, on ajoute aussi un sink fichier.
|
|
try:
|
|
from loguru import logger as _loguru
|
|
|
|
_loguru.add(str(path), rotation="2 MB", retention=3, encoding="utf-8")
|
|
except Exception:
|
|
pass
|
|
_CONFIGURED = True
|
|
return path
|
|
|
|
|
|
def _reset_for_tests() -> None:
|
|
"""Réinitialise l'état pour l'isolation des tests (NE PAS appeler en prod)."""
|
|
global _CONFIGURED
|
|
root = logging.getLogger()
|
|
for h in list(root.handlers):
|
|
if isinstance(h, RotatingFileHandler):
|
|
root.removeHandler(h)
|
|
h.close()
|
|
_CONFIGURED = False
|