volontariapp-logger
Modifier ou utiliser @volontariapp/logger : masquage des données personnelles (clés, motifs, configuration), champs trace_id / dd.trace_id / dd.span_id injectés depuis le span OpenTelemetry actif, pièges de compatibilité (React Native, ordre des champs JSON).
- License 许可
- MIT
- 最近更新
- 2026-11-10
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- volontariapp-logger
- tags
- [ "logger" ]
- type
- Standard
- paths
- [ "npm-packages/packages/logger/**" ]
- title
- Logger partagé : masquage et corrélation de traces
- status
- stable
- sources
- [ { "id": "masking", "title": "Masker (clés, motifs, récursion)", "resource": "npm-packages/packages/logger/src/masking.ts" }, { "id": "trace", "title": "getTraceFields (format Datadog)", "resource": "npm-packages/packages/logger/src/trace-context.ts" } ]
- verified
- [ { "at": "2026-10-12T11:52:50Z", "by": "claude-code/agent", "digest": "86278baab7297a03" }, { "at": "2026-10-14T11:23:38Z", "by": "claude-code/agent", "digest": "4a661b3a09f37ef9" }, { "at": "2026-10-14T12:23:29Z", "by": "claude-code/agent", "digest": "b333301de25de090" }, { "at": "2026-10-14T12:24:02Z", "by": "claude-code/agent", "digest": "a62d0a28b88580fa" }, { "at": "2026-10-29T15:11:46Z", "by": "claude-code/agent", "digest": "186ccf2fcdc0e887" } ]
- generated
- { "at": "2026-10-07T09:33:37Z", "by": "claude-code/agent" }
- mesh_keys
- [ "@volontariapp/logger", "Masker" ]
- description
- Modifier ou utiliser @volontariapp/logger : masquage des données personnelles (clés, motifs, configuration), champs trace_id / dd.trace_id / dd.span_id injectés depuis le span OpenTelemetry actif, pièges de compatibilité (React Native, ordre des champs JSON).
02 资源文件 7
- 参考文档evals/triggers.json3.6 KB
- 参考文档index.md631 B
- 参考文档log.md1.1 KB
- 参考文档references/lessons.md490 B
- 参考文档references/registry.md3.4 KB
- 脚本scripts/shadcn_add.mjs9.4 KB
- 脚本scripts/shadcn_add.ts13.8 KB
03 SKILL.md 正文
Logger partagé : masquage et corrélation de traces
Quand utiliser cette skill
Modifier ou utiliser @volontariapp/logger : masquage des données personnelles (clés, motifs, configuration), champs trace_id / dd.trace_id / dd.span_id injectés depuis le span OpenTelemetry actif, pièges de compatibilité (React Native, ordre des champs JSON).
Règles
- Masquage actif par défaut :
Loggermasque métadonnées, paramètres positionnels, détails d'erreur et message avant sérialisation (JSON et texte). Clés par fragment, sans casse ni-/_(x-internal-token,refresh_token,userEmailsont masqués), motifs email, JWT etBearerdans les chaînes. Sur-masquer (tokenCount) est assumé : mieux vaut perdre un détail qu'une donnée personnelle[^masking]. - Configuration :
new Logger({ masking: { keys, patterns, replacement } })ajoute aux défauts (ne les remplace pas),masking: falsedésactive. Un motif sans drapeaugest converti en global parMasker[^masking]. - Pas de mutation, pas de crash :
Maskerrenvoie une copie, gère tableaux, instances de classe, erreurs et cycles ([Circular]). Une référence partagée non circulaire n'est pas un cycle (ancêtres suivis dans unWeakSet)[^masking]. - Corrélation de traces et format JSON Datadog : en format JSON uniquement, le payload inclut
status(égal au niveau du log, ex:debug,info,warn,errorpour que Datadog mappe nativement la sévérité au lieu d'inférer Error depuis stderr) ainsi quetrace_id(hex),dd.trace_id(64 bits de poids faible, décimal) etdd.span_id(décimal) qui viennent du span actif via@opentelemetry/api. Ils sont écrits après les métadonnées, l'appelant ne peut pas les écraser. Aucune dépendance au SDK : sans span, aucun champ trace[^trace]. - Compatibilité et pureté : le logger sert aussi React Native et NestJS. Ne pas y ajouter de dépendance Node-only, ni de
process.env/NODE_ENV, ni le SDK OpenTelemetry. La configuration (format JSON ou texte) doit rester explicite. - Configuration globale par défaut :
Logger.setDefaultConfig({ format, minLevel, ... })définit les options globales héritées par toutnew Logger({ context })ultérieur. Permet d'activer le format JSON en production au démarrage dansmain.tssans modifier chaque contrôleur et sans heuristiqueprocess.env.Logger.resetDefaultConfig()réinitialise la configuration globale (utilisé dans les specs) etLogger.getDefaultConfig()en renvoie une copie. Fusion superficielle{ ...defaultConfig, ...config }faite dans le constructeur : la config passée ànew Loggerl'emporte clé par clé, et unmaskingpassé au constructeur remplace celui de la config globale (il n'est pas fusionné avec lui).setDefaultConfigfusionne dans la config globale existante. - Tests :
@opentelemetry/apisans gestionnaire de contexte ne propage rien ; les specs espionnenttrace.getActiveSpanavectrace.wrapSpanContext(createSpanContext())(src/test/factories/span-context.factory.ts). Les erreurs passent parconsole.error, pasconsole.log. - Toute modification suit la règle du STOP de
volontariapp-shared-npm-package-change: le changement de comportement par défaut touche tous les consommateurs au bump.
Références
Scripts
- Lint hors workspace (
yarn lintéchoue, eslint n'est installé que poureslint-config) : depuisnpm-packages/packages/logger,node ../../node_modules/eslint/bin/eslint.js src/.
04 同仓库更多 Skills
volontariapp-user-account-deletion
Suppression de compte en deux temps (PENDING_DELETION): requestDeletionWithUserDeleted, finalizeDeletion, fan-out de user.deleted vers les domaines et gather ws. A utiliser pour tout changement de domain-user touchant la suppression, le statut ou le cycle de vie d'un user.
volontariapp-proto-contract-evolution
Modifier un contrat Protobuf de proto-registry (champ, message, enum, RPC) sans casser la compatibilité wire, puis suivre la cascade proto-registry, PR automatique dans npm-packages, publication, consommateurs. À utiliser avant toute édition d'un .proto.
volontariapp-meta-scripts
Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace.
volontariapp-implement-async-event-flow
Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).
research
Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.
prototype
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.