File size: 2,549 Bytes
8a848a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
Configuration du système de logging pour l'assistant de recherche.
Permet de tracer les événements importants (infos, erreurs, avertissements, etc.)
"""

import logging
import sys
from pathlib import Path
from logging.handlers import RotatingFileHandler

# --- Création du dossier des logs ---
log_directory = Path("logs")
log_directory.mkdir(exist_ok=True)

# --- Fonction de configuration du logger ---
def setup_logger(name: str, level: int = logging.INFO) -> logging.Logger:
    """
    Configure et retourne un logger complet avec console et fichiers rotatifs.

    Args:
        name (str): Nom du logger (ex: 'research_assistant')
        level (int): Niveau minimal de logging (par défaut: INFO)

    Returns:
        logging.Logger: Logger configuré
    """
    logger = logging.getLogger(name)
    logger.setLevel(level)

    # Éviter les doublons si setup_logger() est appelé plusieurs fois
    if logger.hasHandlers():
        logger.handlers.clear()

    # Formatage lisible du message de log
    formatter = logging.Formatter(
        "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S"
    )

    # --- Handler Console (affichage terminal) ---
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(logging.DEBUG)  # plus verbeux pour la console
    console_handler.setFormatter(formatter)

    # --- Handler Fichier (logs persistants) ---
    file_handler = RotatingFileHandler(
        log_directory / f"{name}.log",
        maxBytes=5 * 1024 * 1024,  # 5 Mo
        backupCount=5,             # garder 5 fichiers d'historique
        encoding='utf-8'
    )
    file_handler.setLevel(logging.INFO)  # moins de bruit dans les fichiers
    file_handler.setFormatter(formatter)

    # --- Ajout des handlers au logger ---
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)

    # Message de démarrage du logger
    logger.info("Logger initialisé avec succès.")
    return logger


# --- Exemple d’utilisation du logger ---
app_logger = setup_logger("research_assistant")

if __name__ == "__main__":
    app_logger.debug("Ceci est un message DEBUG (utile pour le débogage).")
    app_logger.info("Démarrage de l'application de recherche...")
    app_logger.warning("Avertissement : connexion lente à la base de données.")
    app_logger.error("Erreur : impossible de charger un fichier de configuration.")
    app_logger.critical("ERREUR CRITIQUE : application arrêtée.")
    app_logger.info("Application terminée.")