generated from gilles/template-webapp
claude code
This commit is contained in:
105
backend/app/core/logging.py
Normal file
105
backend/app/core/logging.py
Normal file
@@ -0,0 +1,105 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user