Espaces de noms et filtrage
Espaces de noms et filtrage à l'exécution
Au-delà de la liste blanche levels / minLevel appliquée au build, $debug embarque des contrôles à l'exécution pour changer ce qui s'affiche sans toucher la configuration ni redémarrer, et pour regrouper les logs par espace de noms.
const auth = $debug.ns("auth"); // journaliseur dédié, étiquette chaque appel [auth]
auth("info", "login ok"); // → MARS-TECH Info [auth] - login ok
auth("debug", payload, { tag: "token" }); // l'espace de noms devient "auth:token"
$debug.enable("auth:*,-auth:token"); // affiche auth:* sauf auth:token
$debug.disable(); // coupe tout
$debug.enable(null); // retire la surcharge d'exécution → retour au `filter` par défaut du plugin
$debug.setLevel("warning"); // relève le seuil (dans la limite du build)
$debug.setLevel(null); // efface la surcharge de niveau à l'exécutionL'espace de noms est l'étiquette (tag) : $debug("info", "x", { tag: "auth" }) et $debug.ns("auth")("info", "x") filtrent à l'identique. Sans filtre actif, tout s'affiche.
Syntaxe du filtre (à la manière du paquet debug) : termes séparés par virgule ou espace, joker *, - en tête pour exclure (les exclusions priment). Un appel sans étiquette a un espace de noms vide : un filtre qui nomme des espaces de noms (auth:*) l'écarte, tandis qu'un filtre fait uniquement d'exclusions (-noisy) laisse passer tout le reste, appels sans étiquette compris.
D'où vient le filtre, par priorité décroissante :
| Surface | Filtre d'espace de noms | Seuil de niveau |
|---|---|---|
| Navigateur | paramètre d'URL ?mt-debug=auth:* → localStorage["mt-debug"] | ?mt-debug-level= → localStorage["mt-debug-level"] |
| SSR/Node | variable d'environnement MT_DEBUG=auth:* | variable d'environnement MT_DEBUG_LEVEL=warning |
En dessous se trouve la valeur par défaut fixée au build par l'option filter du plugin, à laquelle $debug.enable(null) revient.
enable / disable / setLevel persistent dans localStorage côté navigateur (le choix survit aux rechargements) ; côté serveur, ils s'appliquent pour la durée du processus. Le filtrage à l'exécution est borné par le jeu de niveaux du build : vous pouvez masquer des niveaux compilés, pas ressusciter ceux qui ont été supprimés.
Les filtres comparent le vrai espace de noms, même quand le masquage le cache dans la sortie : ?mt-debug=-user:* fait toujours taire $debug.ns("user:" + email).
Filtrage par préfixe
Un second axe, orthogonal, filtre par le préfixe affiché, la tête de chaque ligne ([MARS-TECH]). Avec brandPrefix, un préfixe est une identité par source : c'est ainsi qu'on coupe une bibliothèque bavarde ou qu'on isole les logs de son application :
$debug.setPrefixFilter("MyApp"); // n'afficher que le préfixe "MyApp"
$debug.setPrefixFilter("-NoisyLib"); // masquer tout ce qui vient de "NoisyLib"
$debug.setPrefixFilter(null); // effacer → tous les préfixes passentMême syntaxe que le filtre d'espaces de noms, à la manière du paquet debug (*, séparation par virgule ou espace, - en tête pour exclure). Sources, par priorité décroissante :
| Surface | Filtre de préfixe |
|---|---|
| Navigateur | paramètre d'URL ?mt-debug-prefix=MyApp → localStorage["mt-debug-prefix"] |
| SSR/Node | variable d'environnement MT_DEBUG_PREFIX=MyApp |
| Valeur par défaut au build | option du plugin mtDebug({ prefixFilter: "-NoisyLib" }) |
Dans le navigateur, setPrefixFilter persiste dans localStorage, comme enable.
Le filtre est comparé au préfixe effectif de chaque appel (options.prefix s'il est défini, sinon le prefix configuré), avant tout masquage. Avec test: 'log', le journaliseur de console des tests le respecte aussi.
Réserve
Les fonctions utilitaires (time/count/group) portent toujours le prefix configuré : la sortie d'une fonction utilitaire appelée dans une bibliothèque est donc filtrée sous le préfixe de l'application, pas sous celui de la bibliothèque.