# 📋 Guide d'utilisation des Logs - FabNum **Date** : 2026-02-07 **Module** : utils/logger.py --- ## 📂 Emplacement des logs Tous les logs sont centralisĂ©s dans le dossier : ``` logs/ ├── utils_graph_utils.log # Logs des fonctions de graphe ├── utils_widgets.log # Logs des widgets HTML ├── batch_ia_utils_sections.log # Logs gĂ©nĂ©ration sections IA ├── app_fiches_utils_tickets_display.log # Logs affichage tickets └── app_plan_d_action_utils_data_data_utils.log # Logs plan d'action ``` Chaque module a **son propre fichier de log**, ce qui facilite le dĂ©bogage ciblĂ©. --- ## 🔍 Comment consulter les logs ### 1. **Voir les logs en temps rĂ©el** ```bash # Suivre tous les logs tail -f logs/*.log # Suivre un module spĂ©cifique tail -f logs/utils_graph_utils.log # Suivre plusieurs modules tail -f logs/utils_graph_utils.log logs/batch_ia_utils_sections.log ``` ### 2. **Voir les derniers logs** ```bash # 20 derniĂšres lignes de tous les logs tail -20 logs/*.log # 50 derniĂšres lignes d'un module spĂ©cifique tail -50 logs/utils_graph_utils.log ``` ### 3. **Rechercher dans les logs** ```bash # Chercher toutes les erreurs grep -r "ERROR" logs/ # Chercher tous les warnings grep -r "WARNING" logs/ # Chercher un terme spĂ©cifique grep -r "hafnium" logs/ # Chercher avec contexte (3 lignes avant/aprĂšs) grep -C 3 "ERROR" logs/*.log ``` ### 4. **Filtrer par niveau de log** ```bash # Voir uniquement les erreurs et warnings grep -E "ERROR|WARNING" logs/*.log # Voir uniquement les erreurs critiques grep "ERROR" logs/*.log # Exclure les tests grep -v "test_" logs/*.log | grep ERROR ``` ### 5. **Analyser par pĂ©riode** ```bash # Logs d'aujourd'hui grep "$(date +%Y-%m-%d)" logs/*.log # Logs d'une heure spĂ©cifique grep "2026-02-07 17:" logs/*.log ``` --- ## 📊 Exemples de logs actuels ### ✅ Logs normaux (WARNING) ``` 2026-02-07 17:24:25 - utils.graph_utils - WARNING - NƓuds manquants pour MineraiInexistant : MineraiInexistant, Extraction_MineraiInexistant, Reserves_MineraiInexistant — IgnorĂ©. ``` **InterprĂ©tation** : Le systĂšme cherche un minerai qui n'existe pas dans le graphe. C'est normal lors des tests, le systĂšme l'ignore gracieusement. --- ### ✅ Logs cas edge (WARNING) ``` 2026-02-07 17:28:21 - batch_ia.utils.sections - WARNING - Impossible de traiter le produit 'ProcĂ©dĂ© EUV' (cas edge hafnium/EUV): 'NoneType' object has no attribute 'split' ``` **InterprĂ©tation** : Le cas edge de l'hafnium liĂ© au procĂ©dĂ© EUV est dĂ©tectĂ©. Le systĂšme continue le traitement des autres produits. C'est le comportement attendu. --- ## 🎹 Format des logs Chaque ligne de log suit ce format : ``` [TIMESTAMP] - [MODULE] - [NIVEAU] - [MESSAGE] ``` **Exemple** : ``` 2026-02-07 17:24:25 - utils.graph_utils - WARNING - NƓuds manquants pour MineraiInexistant │ │ │ │ │ │ │ └─ Message dĂ©taillĂ© │ │ └─────────── Niveau (DEBUG, INFO, WARNING, ERROR, CRITICAL) │ └──────────────────────────────── Nom du module Python └───────────────────────────────────────────────────── Timestamp (YYYY-MM-DD HH:MM:SS) ``` --- ## 🎯 Niveaux de log | Niveau | Usage | Action recommandĂ©e | |--------|-------|-------------------| | **DEBUG** | Informations dĂ©taillĂ©es pour le dĂ©bogage | Ignorer en production | | **INFO** | Informations gĂ©nĂ©rales (chargement, succĂšs) | Surveillance normale | | **WARNING** | Situations anormales mais gĂ©rĂ©es | Surveiller, pas d'action immĂ©diate | | **ERROR** | Erreurs qui empĂȘchent une fonctionnalitĂ© | **Action requise** | | **CRITICAL** | Erreurs systĂšme graves | **Action immĂ©diate** | --- ## 🔧 Commandes utiles ### Nettoyer les logs de tests ```bash # Supprimer tous les logs de tests (test_*.log) rm logs/test_*.log # Supprimer tous les logs vides find logs/ -name "*.log" -type f -empty -delete ``` ### Archiver les anciens logs ```bash # CrĂ©er un dossier d'archives mkdir -p logs/archives # Archiver les logs de la semaine derniĂšre tar -czf logs/archives/logs_$(date +%Y%m%d).tar.gz logs/*.log # Vider les logs actuels (garder les fichiers) truncate -s 0 logs/*.log ``` ### Surveiller les erreurs en temps rĂ©el ```bash # Afficher uniquement les nouvelles erreurs tail -f logs/*.log | grep --line-buffered "ERROR" # Avec notification sonore tail -f logs/*.log | grep --line-buffered "ERROR" && echo -e '\a' ``` --- ## 📈 Monitoring en production ### 1. **Surveillance quotidienne** ```bash # Script de surveillance (Ă  lancer quotidiennement) #!/bin/bash echo "=== Rapport de logs FabNum - $(date) ===" echo "" echo "Nombre d'erreurs aujourd'hui:" grep "$(date +%Y-%m-%d)" logs/*.log | grep -c "ERROR" echo "" echo "Nombre de warnings aujourd'hui:" grep "$(date +%Y-%m-%d)" logs/*.log | grep -c "WARNING" echo "" echo "DerniĂšres erreurs:" grep "$(date +%Y-%m-%d)" logs/*.log | grep "ERROR" | tail -5 ``` ### 2. **Alertes par email** (optionnel) ```bash # Si plus de 10 erreurs aujourd'hui, envoyer un email ERROR_COUNT=$(grep "$(date +%Y-%m-%d)" logs/*.log | grep -c "ERROR") if [ $ERROR_COUNT -gt 10 ]; then echo "⚠ $ERROR_COUNT erreurs dĂ©tectĂ©es" | mail -s "Alerte FabNum" admin@example.com fi ``` ### 3. **Dashboard simple** ```bash # Afficher un rĂ©sumĂ© colorĂ© echo -e "\n📊 RĂ©sumĂ© des logs FabNum\n" echo "đŸ”” INFO: $(grep -c 'INFO' logs/*.log 2>/dev/null || echo 0)" echo "🟡 WARNING: $(grep -c 'WARNING' logs/*.log 2>/dev/null || echo 0)" echo "🔮 ERROR: $(grep -c 'ERROR' logs/*.log 2>/dev/null || echo 0)" ``` --- ## đŸ› ïž DĂ©pannage ### ProblĂšme : Les logs ne s'affichent pas **Solution 1** : VĂ©rifier les permissions ```bash ls -lh logs/ chmod 755 logs/ chmod 644 logs/*.log ``` **Solution 2** : VĂ©rifier que le dossier logs/ existe ```bash mkdir -p logs ``` **Solution 3** : VĂ©rifier le niveau de log dans le code ```python # Dans votre module from utils.logger import setup_logger logger = setup_logger(__name__, level="DEBUG") # Forcer DEBUG ``` ### ProblĂšme : Trop de logs **Solution** : Augmenter le niveau de log ```python # Passer de DEBUG Ă  INFO logger = setup_logger(__name__, level="INFO") ``` ### ProblĂšme : Logs en double **Solution** : Le logger est configurĂ© plusieurs fois ```python # S'assurer d'appeler setup_logger une seule fois par module # Au dĂ©but du fichier, en global logger = setup_logger(__name__) ``` --- ## 📝 Bonnes pratiques ### ✅ À FAIRE ```python # Utiliser le bon niveau logger.info("Chargement du graphe rĂ©ussi") logger.warning("NƓud manquant, utilisation valeur par dĂ©faut") logger.error("Impossible de se connecter Ă  Gitea", exc_info=True) # Ajouter du contexte logger.error(f"Erreur lors du traitement de {produit_id}", exc_info=True) # Logger les exceptions avec stacktrace try: # code except Exception as e: logger.error(f"Erreur inattendue: {e}", exc_info=True) ``` ### ❌ À ÉVITER ```python # Ne pas utiliser print() print("Erreur") # ❌ # Ne pas logger des informations sensibles logger.info(f"Token: {GITEA_TOKEN}") # ❌ # Ne pas logger en boucle sans limite for i in range(10000): logger.debug(f"Iteration {i}") # ❌ Surcharge ``` --- ## 🎓 Exemples d'usage ### Exemple 1 : DĂ©boguer un problĂšme de chargement ```bash # 1. Voir les derniers logs de graph_utils tail -50 logs/utils_graph_utils.log # 2. Chercher les erreurs grep "ERROR" logs/utils_graph_utils.log # 3. Voir le contexte autour d'une erreur grep -C 5 "ERROR" logs/utils_graph_utils.log ``` ### Exemple 2 : Surveiller la gĂ©nĂ©ration IA ```bash # Suivre en temps rĂ©el tail -f logs/batch_ia_utils_sections.log # Filtrer les warnings tail -f logs/batch_ia_utils_sections.log | grep "WARNING" ``` ### Exemple 3 : Analyser les performances ```bash # Compter combien de fois un minerai est manquant grep "NƓuds manquants" logs/utils_graph_utils.log | wc -l # Lister les minerais manquants uniques grep "NƓuds manquants pour" logs/utils_graph_utils.log | \ sed 's/.*pour \(.*\) :.*/\1/' | sort | uniq ``` --- ## 📚 Ressources - **Module source** : [utils/logger.py](utils/logger.py) - **Tests** : [tests/unit/test_logger.py](tests/unit/test_logger.py) - **Documentation** : [REFACTORING_REPORT.md](REFACTORING_REPORT.md) --- **DerniĂšre mise Ă  jour** : 2026-02-07