generated from gilles/template-webapp
106 lines
3.0 KiB
Python
106 lines
3.0 KiB
Python
"""Configuration du système de logging avec Loguru.
|
|
|
|
Loguru est une bibliothèque de logging moderne et simple à utiliser.
|
|
Documentation : https://loguru.readthedocs.io/
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from loguru import logger
|
|
|
|
from app.core.config import settings
|
|
|
|
# Supprimer les handlers par défaut de loguru
|
|
logger.remove()
|
|
|
|
|
|
def setup_logging() -> None:
|
|
"""Configure le système de logging pour l'application.
|
|
|
|
- En développement : logs dans stdout + fichier debug
|
|
- En production : logs dans fichiers avec rotation
|
|
"""
|
|
# Format de log avec couleurs pour stdout
|
|
log_format = (
|
|
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
|
"<level>{level: <8}</level> | "
|
|
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
|
|
"<level>{message}</level>"
|
|
)
|
|
|
|
# Format de log sans couleurs pour fichiers
|
|
log_format_file = (
|
|
"{time:YYYY-MM-DD HH:mm:ss.SSS} | "
|
|
"{level: <8} | "
|
|
"{name}:{function}:{line} - "
|
|
"{message}"
|
|
)
|
|
|
|
# === Configuration commune ===
|
|
# Handler pour stdout (console)
|
|
logger.add(
|
|
sys.stdout,
|
|
format=log_format,
|
|
level=settings.LOG_LEVEL,
|
|
colorize=True,
|
|
backtrace=True, # Affiche le traceback complet des exceptions
|
|
diagnose=settings.DEBUG, # Affiche les valeurs des variables en debug
|
|
)
|
|
|
|
# Créer le répertoire des logs s'il n'existe pas
|
|
log_dir = Path("logs")
|
|
log_dir.mkdir(exist_ok=True)
|
|
|
|
# === Configuration par environnement ===
|
|
if settings.is_development:
|
|
# En développement : logs détaillés dans un fichier
|
|
logger.add(
|
|
"logs/homestock_dev.log",
|
|
format=log_format_file,
|
|
level="DEBUG",
|
|
rotation="10 MB", # Rotation tous les 10 Mo
|
|
retention="7 days", # Garde les logs 7 jours
|
|
compression="zip", # Compression des logs archivés
|
|
backtrace=True,
|
|
diagnose=True,
|
|
)
|
|
else:
|
|
# En production : logs normaux + logs d'erreurs séparés
|
|
logger.add(
|
|
"logs/homestock.log",
|
|
format=log_format_file,
|
|
level="INFO",
|
|
rotation="50 MB",
|
|
retention="30 days",
|
|
compression="zip",
|
|
backtrace=True,
|
|
diagnose=False,
|
|
)
|
|
|
|
# Fichier séparé pour les erreurs
|
|
logger.add(
|
|
"logs/homestock_errors.log",
|
|
format=log_format_file,
|
|
level="ERROR",
|
|
rotation="50 MB",
|
|
retention="90 days", # Garde les erreurs plus longtemps
|
|
compression="zip",
|
|
backtrace=True,
|
|
diagnose=False,
|
|
)
|
|
|
|
logger.info(f"Logging configuré (level={settings.LOG_LEVEL}, env={settings.ENVIRONMENT})")
|
|
|
|
|
|
def get_logger(name: str) -> "logger":
|
|
"""Retourne un logger avec un nom spécifique.
|
|
|
|
Args:
|
|
name: Nom du logger (généralement __name__ du module)
|
|
|
|
Returns:
|
|
Logger configuré avec le nom spécifié
|
|
"""
|
|
return logger.bind(name=name)
|