Synthèse automatique
Fournit des recommandations pour utiliser le wrapper ConsoleService du projet, afin de contrôler et de préfixer les journalisations console dans les applications Angular.
Points forts
- Impose un modèle de journalisation contextuelle via contextConsole avec préfixe automatique du nom de classe.
- Permet un contrôle fin par appel grâce aux options always, never et opts().
- Centralise les règles de visibilité pour activer/désactiver les sorties en développement et production, y compris pour les bibliothèques tierces.
- Documente le patch de bootstrap et les méthodes disponibles.
Limites
- Spécifique aux projets Angular disposant du ConsoleService et du patch de bootstrap.
- Nécessite d'adopter la convention de préfixe avec le nom de méthode pour une lecture optimale.
- Le mécanisme de filtrage peut masquer le comportement natif de la console si enableConsole n'est pas correctement configuré.
À utiliser lors de l'ajout de journaux console dans des fichiers Angular ou pour comprendre pourquoi un log est visible ou masqué selon l'environnement.
À ne pas utiliser pour des projets non-Angular ou lorsqu'on a besoin d'accéder directement à la console native sans filtrage ni préfixe.
Analyse de sécurité
SûrThis skill provides guidance on using a console logging wrapper. It contains no executable instructions, no external tools, and includes security best practices like avoiding logging sensitive data.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
I'm working on an Angular project. Add scoped console logging to UserService using contextConsole from @app/core/services/console/console.service. Prefix each log with the method name and label.Use the ConsoleService skill to make a console.error visible even in production. I need to log a critical failure in my payment service. Show me the exact syntax with the always override.My console.log calls are not showing up in the production build. Explain the visibility rules for ConsoleService and how to check whether enableConsole is false or if a never override is suppressing them.name: console-service description: 'Provides implementation guidance for ConsoleService — the environment-aware console wrapper in this Angular project. Use when adding console logging to any Angular file, using contextConsole, always, never, or opts overrides, checking visibility rules, or understanding how the bootstrap patch gates console output. Keywords: console, logging, ConsoleService, contextConsole, always, never, opts, enableConsole, console.log, console.warn, console.error, suppress, force, scoped logger, console gating, production logging, dev logging.'
ConsoleService — Usage Guide
Location
projects/my-app/src/app/core/services/console/
console.service.ts ← service, types, contextConsole, opts/always/never
console.patch.ts ← patchConsole() bootstrap helper
Path alias: @app/core/services/console/console.service
When to Use This Skill
- Adding any
console.*call in Angular files - Deciding whether to use
always,never, oropts() - Using timers (
time/timeEnd/timeLog), groups,table,dir,assert, orcount - Understanding why a log is or isn't appearing
- Checking visibility rules for dev vs prod
How It Works
ConsoleService is patched over the native console once in App.ngOnInit() via patchConsole() from console.patch.ts. After that, all console.* calls in the app (including third-party libraries) are automatically gated by ConsoleService.enabled, which is initialised from environment.enableConsole.
| Environment | enableConsole | Default behaviour |
|-------------|-----------------|-------------------|
| ng serve (dev) | true | All console output visible |
| ng build (prod) | false | All console output silent unless force: true |
Scoped Logger (Recommended Pattern)
Add one line at the top of any file — no injection needed:
import { contextConsole } from '@app/core/services/console/console.service';
const console = contextConsole('ClassName');
Every console.* call in that file is then auto-prefixed: [ClassName] message.
ALWAYS use contextConsole for any new logging in this project.
Per-Call Overrides
Import always or never alongside contextConsole when needed:
import { contextConsole, always, never } from '@app/core/services/console/console.service';
const console = contextConsole('ClassName');
// Force output even in production:
console.error(always, 'Critical failure:', err); // → [ClassName] Critical failure: ...
// Permanently silence even in dev:
console.log(never, 'Polling tick'); // → silent
// Normal log — gated by enableConsole:
console.log('[methodName] value:', value); // → [ClassName] [methodName] value: ...
Use opts({ force, suppress }) for custom combinations not covered by always/never.
Message Prefix Convention
When logging inside a method, include the method name as a prefix string:
console.log('[methodName] label:', value);
// Output: [ClassName] [methodName] label: value
Visibility Rules (evaluated in order)
| Rule | Condition | Result |
|------|-----------|--------|
| 1 | suppress: true (per-call) | Always silent — wins over everything |
| 2 | force: true (per-call) | Always output — bypasses global toggle |
| 3 | enabled = false | Silent (no override present) |
| 4 | enabled = true | Output |
suppress always beats force if both are set.
Available Methods
All methods accept always, never, or opts() as an optional first argument.
| Method | Notes |
|--------|-------|
| log, warn, error, debug, info, trace | Standard output |
| group(label?), groupCollapsed(label?) | Opens a collapsible group |
| groupEnd() | Closes current group |
| clear() | Clears the console |
| count(label?) | Increments named counter |
| countReset(label?) | Resets named counter |
| time(label?) | Starts named timer |
| timeEnd(label?) | Stops timer, logs elapsed |
| timeLog(label?, ...data) | Logs current timer value |
| assert(condition?, ...data) | Logs error if condition is false |
| table(tabularData?, properties?) | Tabular display |
| dir(item?, options?) | Interactive object listing |
In contextConsole(), label methods (count, countReset, time, timeEnd, timeLog) automatically prepend the tag to the label.
Quick Reference
| Intent | Syntax |
|--------|--------|
| Scoped logger (recommended) | const console = contextConsole('ClassName') at top of file |
| Normal log | console.log('[method] label:', value) |
| Always visible (prod-safe) | console.error(always, '[method] msg:', err) |
| Always silent | console.log(never, '[method] msg') |
| Group related logs | console.group('[method]'); ... console.groupEnd(); |
| Time an operation | console.time('label'); ... console.timeEnd('label'); |
| Display object tree | console.dir(obj) |
| Display array as table | console.table(arr) |
| Runtime enable | this.consoleService.enabled = true |
| Runtime disable | this.consoleService.enabled = false |
Security Rules
- Never log auth tokens, passwords, API keys, or user PII — even behind
never(the text still exists in source). - Use
alwaysonly for operational messages (errors, disconnects) — not data-bearing payloads. - Audit any call site that logs HTTP responses or form values before using
always.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/consoleservice-usage-guide-msh3uusf' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/consoleservice-usage-guide-msh3uusf/download' --output '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md.part' && mv '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md.part' '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Extrait original : Quick Reference
| Intent | Syntax |
|---|---|
| Scoped logger (recommended) | const console = contextConsole('ClassName') at top of file |
| Normal log | console.log('[method] label:', value) |
| Always visible (prod-safe) | console.error(always, '[method] msg:', err) |
| Always silent | console.log(never, '[method] msg') |
| Group related logs | console.group('[method]'); ... console.groupEnd(); |
| Time an operation | console.time('label'); ... console.timeEnd('label'); |
| Display object tree | console.dir(obj) |
| Display array as table | console.table(arr) |
| Runtime enable | this.consoleService.enabled = true |
| Runtime disable | this.consoleService.enabled = false |
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && test -s '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/console-service' && cp -R '.skill-downloads/consoleservice-usage-guide-msh3uusf' '.claude/skills/console-service'Cursor
test -f '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && test -s '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/console-service' && cp -R '.skill-downloads/consoleservice-usage-guide-msh3uusf' '.cursor/skills/console-service'Codex
test -f '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && test -s '.skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/console-service' && cp -R '.skill-downloads/consoleservice-usage-guide-msh3uusf' '.agents/skills/console-service'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/consoleservice-usage-guide-msh3uusf'openskills read 'consoleservice-usage-guide-msh3uusf'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/consoleservice-usage-guide-msh3uusf/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.