AGENT SKILL

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
所属仓库
Volontariapp/meta
最近更新
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

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 : Logger masque 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, userEmail sont masqués), motifs email, JWT et Bearer dans 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: false désactive. Un motif sans drapeau g est converti en global par Masker[^masking].
  • Pas de mutation, pas de crash : Masker renvoie 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 un WeakSet)[^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, error pour que Datadog mappe nativement la sévérité au lieu d'inférer Error depuis stderr) ainsi que trace_id (hex), dd.trace_id (64 bits de poids faible, décimal) et dd.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 tout new Logger({ context }) ultérieur. Permet d'activer le format JSON en production au démarrage dans main.ts sans modifier chaque contrôleur et sans heuristique process.env. Logger.resetDefaultConfig() réinitialise la configuration globale (utilisé dans les specs) et Logger.getDefaultConfig() en renvoie une copie. Fusion superficielle { ...defaultConfig, ...config } faite dans le constructeur : la config passée à new Logger l'emporte clé par clé, et un masking passé au constructeur remplace celui de la config globale (il n'est pas fusionné avec lui). setDefaultConfig fusionne dans la config globale existante.
  • Tests : @opentelemetry/api sans gestionnaire de contexte ne propage rien ; les specs espionnent trace.getActiveSpan avec trace.wrapSpanContext(createSpanContext()) (src/test/factories/span-context.factory.ts). Les erreurs passent par console.error, pas console.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 pour eslint-config) : depuis npm-packages/packages/logger, node ../../node_modules/eslint/bin/eslint.js src/.

04 同仓库更多 Skills

Volontariapp
Volontariapp/meta

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.

★ 0
Volontariapp
Volontariapp/meta

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.

律师与法务
★ 0
Volontariapp
Volontariapp/meta

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.

Skill与智能体开发
★ 0
Volontariapp
Volontariapp/meta

volontariapp-implement-async-event-flow

Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).

前端开发
★ 0
Volontariapp
Volontariapp/meta

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.

资料检索与研究
★ 0
Volontariapp
Volontariapp/meta

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.

设计师
★ 0