xcraft-core-log
v2.2.1
Published
Xcraft logger
Readme
📘 xcraft-core-log
Aperçu
Le module xcraft-core-log est le système de journalisation central du framework Xcraft. Il fournit une interface unifiée pour la gestion des logs avec support de différents niveaux de verbosité, filtrage par modules, coloration syntaxique, et intégration avec les systèmes de bus et de journalisation persistante de Xcraft.
Sommaire
- Structure du module
- Fonctionnement global
- Exemples d'utilisation
- Interactions avec d'autres modules
- Configuration avancée
- Détails des sources
Structure du module
Le module est organisé autour de plusieurs composants principaux :
- Logger principal (
lib/index.js) : ClasseLogqui gère l'affichage et la distribution des messages - Interface bus (
buslog.js) : Commandes exposées sur le bus Xcraft pour contrôler le logging à distance - Configuration (
config.js) : Options configurables viaxcraft-core-etc
Le système supporte 5 niveaux de log : verb (0), info (1), warn (2), err (3), et dbg (4).
Fonctionnement global
Le logger fonctionne selon un modèle d'événements où chaque instance de Log :
- Filtre les messages selon le niveau de verbosité et les modules autorisés
- Formate les messages avec coloration, horodatage et identification du module
- Distribue les logs vers différentes sorties :
- Console standard (stdout/stderr)
- Bus Xcraft (xcraft-core-buslog) pour la supervision
- Journal persistant (xcraft-core-journal) pour l'archivage
Le système détecte automatiquement le module appelant en analysant la pile d'appels et peut filtrer les logs par nom de module. La détection se base sur le pattern xcraft-[type]-[nom] dans le chemin du fichier.
Exemples d'utilisation
Utilisation basique dans un module
const xLog = require('xcraft-core-log')('mon-module');
// Différents niveaux de log
xLog.verb('Message de débogage détaillé');
xLog.info('Information générale');
xLog.warn('Avertissement important');
xLog.err('Erreur critique');
xLog.dbg('Debug technique');
// Vérification du niveau avant log coûteux
if (xLog.isVerb()) {
xLog.verb('Calcul complexe: %j', calculComplexe());
}Affichage de tableaux
const data = [
{nom: 'Alice', age: 30, ville: 'Paris'},
{nom: 'Bob', age: 25, ville: 'Lyon'},
];
xLog.info.table(data);
// Affiche un tableau formaté avec bordures ASCIIConfiguration de verbosité locale
const xLog = require('xcraft-core-log')('mon-module');
// Verbosité locale (ne s'applique qu'à cette instance)
xLog.setVerbosity(2, true); // Seuls warn et err seront affichés
// Désactiver la décoration pour cette instance
xLog.setDecorate(false, true);Gestion des erreurs avec contexte Goblin
const errorWithContext = {
_xcraftOverwatch: true,
err: 'Erreur dans le traitement',
goblin: {
id: 'user-123',
goblin: 'user',
quest: 'updateProfile',
callerGoblin: 'desktop',
callerQuest: 'handleUserAction',
},
};
xLog.err(errorWithContext);
// Affiche l'erreur avec la pile d'appels Goblin complèteContrôle via le bus Xcraft
// Depuis un autre module via le bus
await this.quest.cmd('buslog.enable', {modes: ['event', 'overwatch']});
await this.quest.cmd('buslog.verbosity', {level: 1});
await this.quest.cmd('buslog.modulenames', {modulenames: ['user', 'desktop']});Interactions avec d'autres modules
Avec xcraft-core-buslog
Le module s'intègre automatiquement avec xcraft-core-buslog pour :
- Transmettre les logs via le bus Xcraft
- Supporter les modes de supervision (event, overwatch)
- Permettre le contrôle à distance du logging
- Afficher des barres de progression
Avec xcraft-core-journal
Intégration optionnelle pour la persistance des logs :
- Sauvegarde automatique des logs en fichier
- Configuration via
journalize: true - Chargement différé du module journal
Avec xcraft-core-etc
Utilise le système de configuration pour :
- Charger les paramètres de logging au démarrage
- Appliquer les modes et filtres configurés
- Gérer la configuration interactive
Avec xcraft-core-host
Récupère automatiquement :
- L'identifiant d'application (
appId) - Le nom de la tribu pour les commandes spécialisées
- Gestion gracieuse si le module n'est pas disponible
Configuration avancée
| Option | Description | Type | Valeur par défaut |
| ------------ | ---------------------------------------- | --------- | ----------------- |
| journalize | Active la sauvegarde des logs en fichier | boolean | false |
| modes | Modes buslog à activer au démarrage | array | [] |
Détails des sources
lib/index.js
Le fichier principal expose une factory qui crée des instances de logger pour chaque module. La classe Log hérite d'EventEmitter et fournit un système de logging complet avec détection automatique du module appelant.
État et modèle de données
Chaque instance de Log maintient :
_moduleName: Nom du module propriétaire_currentLevel: Niveau de verbosité local (-1 = utilise le niveau global)_currentDecorate: Activation locale de la décoration (null = utilise le paramètre global)_busLog: Instance du logger bus (chargement différé)_journal: Instance du journal persistant (chargement différé)_resp: Objet de réponse pour les commandes bus
Variables globales :
currentModulesNames: Liste des modules autorisés pour le filtragecurrentLevel: Niveau de verbosité global (0-3)currentUseColor: Activation de la coloration syntaxiquecurrentUseDatetime: Activation de l'horodatagecurrentDecorate: Activation de la décoration des messages
Méthodes publiques
verb(format, ...args)— Log de niveau verbose (0), pour les détails de débogage. Supporte égalementverb.table(data)pour l'affichage tabulaire.info(format, ...args)— Log informatif (1), pour les messages généraux. Supporte égalementinfo.table(data)pour l'affichage tabulaire.warn(format, ...args)— Log d'avertissement (2), pour les situations suspectes. Supporte égalementwarn.table(data)pour l'affichage tabulaire.err(format, ...args)— Log d'erreur (3), pour les erreurs critiques. Supporte égalementerr.table(data)pour l'affichage tabulaire.dbg(format, ...args)— Log de debug (4), pour le débogage technique. Supporte égalementdbg.table(data)pour l'affichage tabulaire.isVerb(),isInfo(),isWarn(),isErr()— Teste si le niveau correspondant est actifprogress(topic, position, length)— Affiche une barre de progression via buslogsetVerbosity(level, onlyLocal)— Définit le niveau de verbosité (0-3)setDecorate(decorate, onlyLocal)— Active/désactive la décoration des messagessetResponse(resp)— Définit l'objet de réponse pour les commandes buscolor(useColor)— Active/désactive la coloration syntaxique globalementdatetime(useDatetime)— Active/désactive l'horodatage globalementgetModule()— Retourne le nom complet du module avec détection automatique du fichier appelantgetLevels()— Retourne la liste des niveaux disponibles en minusculesgetModuleName()— Retourne le nom du module configuré
Méthodes statiques du module
setEnable(enable, modes)— Active/désactive le buslog avec modes optionnelssetModuleNames(moduleNames)— Configure le filtrage global par noms de modulessetGlobalVerbosity(level)— Définit le niveau de verbosité global
buslog.js
Interface de commandes exposées sur le bus Xcraft pour contrôler le logging à distance. Le module génère automatiquement des commandes génériques et spécialisées par application.
Méthodes publiques
enable(modes)— Active le buslog avec les modes spécifiés (optionnel)disable(modes)— Désactive le buslog pour les modes spécifiés (optionnel)modulenames(modulenames)— Configure le filtrage par noms de modulesverbosity(level)— Définit le niveau de verbosité global (requis)
Chaque commande existe en version générique (buslog.enable) et spécialisée par application (${appId}${tribe}.enable). Toutes les commandes supportent l'exécution en parallèle et envoient un événement de fin d'exécution.
Ce document a été mis à jour pour refléter la structure actuelle du module.
