Architecture de Base du Système de Journalisation
Le projet Chef implémente un système de journalisation hiérarchique, centralisé dans le module chef-agent/utils/logger.ts. Ce module définit cinq niveaux de sévérité, allant de trace à error, et utilise un mécanisme de portée pour catégoriser les journaux. Par défaut, le niveau de journalisation est défini sur avertir (warn), mais il peut être ajusté dynamiquement via la fonction chefSetLogLevel pour répondre aux besoins du développement et de la production.
Conception du Module de Journalisation
Structure de Données Principale
Le système de journalisation repose sur un tableau qui ordonne les niveaux de sévérité, garantissant une cohérence dans le filtrage des journaux :
const logPriorities = ['trace', 'debug', 'info', 'avertir', 'erreur'] as const;
type LogLevel = typeof logPriorities[number];
Création de Journaliseurs avec Portée
La fonction createScopedLogger permet de générer des instances de journaliseurs identifiées par une portée, facilitant le suivi des sorties de journaux par module :
export const renderLog = createScopedLogger('Rendu');
// Exemple de sortie : [INFO] [Rendu] Composant monté avec succès
Scénarios d'Application du Système de Journalisation
1. Surveillance des Processus de Déploiement
Lors de l'implémentation des outils de déploiement, le système de journalisation enregistre les étapes clés et les erreurs :
// Application dans chef-agent/tools/deploy.ts
logManager.info('Lancement du processus de déploiement');
if (!identifiantDeploiement) {
logManager.error('Échec du déploiement : identifiant manquant');
return { success: false };
}
2. Suivi des Interactions Terminal
Le module terminal utilise des journaux portée pour tracer les interactions utilisateur et l'exécution des commandes :
// app/lib/stores/terminal.ts
const termLog = createScopedLogger('Terminal');
termLog.debug(`Exécution de la commande : ${cmd}`);
3. Capture et Rapport d'Exceptions
Dans les chemins critiques comme les appels API, le système de journalisation capture les détails des exceptions en collaboration avec les mécanismes de gestion des erreurs :
// app/lib/stores/convexProject.ts
try {
await api.convexProjects.create.mutate(donneesProjet);
} catch (erreur) {
logManager.error('Échec de la création du projet', erreur);
throw new Error('Impossible de créer le projet');
}
Contrôle Dynamique des Niveaux de Journalisation
Le système offre une interface pour ajuster globalement le niveau de journalisation, permettant de basculer entre les modes développement et production :
// Passer temporairement au niveau debug pour le débogage
window.logControl.setNiveau('debug');
// Revenir au niveau avertir pour la production
window.logControl.setNiveau('avertir');
Stratégies d'Implémentation de la Surveillance Système
Agrégation et Analyse des Journaux
En examinant les modèles d'appels de journalisation dans le projet, le système adopte une convention de nommage combinant le module fonctionnel et le type d'opération, par exemple :
- Journaux de changement d'état de conversation dans ChatContextManager.ts
- Journaux de cycle de vie du conteneur dans webcontainer/index.ts
Intégration de la Surveillance des Performances
Combiné avec les fonctions de statistiques d'utilisation dans usage.ts, le système peut enregistrer les temps d'exécution des opérations clés :
// Enregistrer la durée d'un appel API
const tempsDebut = performance.now();
await appelApi();
logManager.info(`Appel API terminé en ${performance.now() - tempsDebut}ms`);
Bonnes Pratiques et Suggestions d'Extension
- Normes de Journalisation : Suivre la convention "qui appelle, quoi fait, résultat obtenu" pour le contenu des journaux.
- Filtrage des Informations Sensibles : Ajouter une logique de masquage des données dans logger.ts.
- Persistance des Journaux : Utiliser localStorage pour persister les journaux côté client, facilitant la traçabilité des problèmes.
- Intégration Visuelle : Étendre en un panneau de visualisatoin des journaux, en s'inspirant des solutions de présentation statistique comme dans admin.usage-breakdown.tsx.
En exploitant efficacement le système de journalisation, les développeurs peuvent rapidement localiser les problèmes et surveiller l'état de santé du système, assurant ainsi la stabilité du projet Chef.