Aller au contenu

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.

ts
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écution

L'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 :

SurfaceFiltre d'espace de nomsSeuil de niveau
Navigateurparamètre d'URL ?mt-debug=auth:* → localStorage["mt-debug"]?mt-debug-level= → localStorage["mt-debug-level"]
SSR/Nodevariable 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 :

ts
$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 passent

Mê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 :

SurfaceFiltre de préfixe
Navigateurparamètre d'URL ?mt-debug-prefix=MyApp → localStorage["mt-debug-prefix"]
SSR/Nodevariable d'environnement MT_DEBUG_PREFIX=MyApp
Valeur par défaut au buildoption 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.