| """ |
| 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 |
|
|
| |
| log_directory = Path("logs") |
| log_directory.mkdir(exist_ok=True) |
|
|
| |
| 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) |
|
|
| |
| if logger.hasHandlers(): |
| logger.handlers.clear() |
|
|
| |
| formatter = logging.Formatter( |
| "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s", |
| datefmt="%Y-%m-%d %H:%M:%S" |
| ) |
|
|
| |
| console_handler = logging.StreamHandler(sys.stdout) |
| console_handler.setLevel(logging.DEBUG) |
| console_handler.setFormatter(formatter) |
|
|
| |
| file_handler = RotatingFileHandler( |
| log_directory / f"{name}.log", |
| maxBytes=5 * 1024 * 1024, |
| backupCount=5, |
| encoding='utf-8' |
| ) |
| file_handler.setLevel(logging.INFO) |
| file_handler.setFormatter(formatter) |
|
|
| |
| logger.addHandler(console_handler) |
| logger.addHandler(file_handler) |
|
|
| |
| logger.info("Logger initialisé avec succès.") |
| return 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.") |