Debug et Logs
SmartCommon fournit un système de logs colorés pour faciliter le debug de votre application.
Activer le mode debug
Dans la configuration du Provider :
const config = {
debug: true, // Active les logs globalement
api: {
debug: true // Active les logs API spécifiquement
}
};
En développement, utilisez la variable d'environnement :
const config = {
debug: import.meta.env.DEV // true en dev, false en prod
};
Utilitaire log
SmartCommon exporte un utilitaire log avec des méthodes colorées :
import { log } from '@cap-rel/smartcommon';
// Logs d'état
log.state('Changement d\'état:', newState);
log.globalState('État global mis à jour:', globalState);
// Logs de cycle de vie
log.effect('useEffect déclenché');
log.page('Page chargée: /dashboard');
// Logs de statut
log.success('Opération réussie');
log.error('Une erreur est survenue:', error);
log.warning('Attention:', message);
log.info('Information:', data);
// Logs API
log.apiLoading('GET', '/api/items');
log.apiSuccess('GET - 200', '/api/items');
log.apiError('GET - 404', '/api/items');
// Logs base de données
log.db('INSERT:', item);
// Logs de localisation
log.location('Navigation vers:', path);
// Log personnalisé
log.custom('MON_TAG', 'purple', 'Mon message', data);
Couleurs des logs
Chaque type de log a une couleur distincte dans la console :
| Méthode | Couleur | Usage |
|---|---|---|
log.state | Bleu | Changements d'état local |
log.globalState | Cyan foncé | Changements d'état global |
log.effect | Violet | Effets React (useEffect) |
log.page | Orange | Chargement de pages |
log.success | Vert | Opérations réussies |
log.error | Rouge | Erreurs |
log.warning | Doré | Avertissements |
log.info | Gris | Informations |
log.apiLoading | Gris | Requête API en cours |
log.apiSuccess | Vert | Requête API réussie |
log.apiError | Rouge | Requête API échouée |
log.db | Bleu nuit | Opérations IndexedDB |
log.location | Rose | Navigation |
createLogger - Logger avec namespace
Pour les projets plus complexes, createLogger permet de créer un logger avec un namespace dédié. Les logs peuvent être filtrés par namespace via localStorage.LOG_FILTER.
import { createLogger } from '@cap-rel/smartcommon';
const logger = createLogger('MyModule');
logger.info('Module initialisé');
logger.success('Données chargées');
logger.error('Échec du chargement');
logger.warning('Données périmées');
logger.state('Changement local:', newState);
logger.globalState('Changement global:', data);
logger.effect('useEffect déclenché');
logger.page('/dashboard');
logger.db('INSERT', item);
// API (premier paramètre = label dynamique)
logger.apiLoading('GET /items');
logger.apiSuccess('GET /items', data);
logger.apiError('GET /items', error);
// Personnalisé
logger.custom('PERF', 'orange', 'Rendu en 12ms');
// Groupes
logger.group('Initialisation');
logger.info('Étape 1');
logger.info('Étape 2');
logger.groupEnd();
Filtrer par namespace
Dans la console du navigateur :
localStorage.LOG_FILTER = 'MyModule,Auth'; // Affiche uniquement ces namespaces localStorage.LOG_LEVEL = 'warn'; // debug | info | warn | error
DebugConsole - Console intégrée
Le composant DebugConsole affiche les logs SmartCommon directement dans l'application. Il est automatiquement inclus par le Provider en mode développement.
Props
| Prop | Type | Défaut | Description |
|---|---|---|---|
defaultOpen | boolean | false | Console ouverte au démarrage |
position | string | “bottom” | Position : “bottom”, “top”, “left”, “right” |
height | string/number | “40vh” | Hauteur de la console |
maxLogs | number | 500 | Nombre maximum de logs conservés |
showFab | boolean | true | Afficher le bouton flottant “>_” |
Utilisation manuelle
import { DebugConsole } from '@cap-rel/smartcommon';
// Inclus automatiquement par Provider en mode DEV
// Pour un usage manuel :
<DebugConsole defaultOpen={true} position="bottom" maxLogs={200} />
La console peut être détachée dans une fenêtre séparée via le bouton de détachement. Les logs sont partagés entre les fenêtres via BroadcastChannel.
Logs automatiques
Quand debug: true est activé, SmartCommon log automatiquement :
useStates
const st = useStates({
initialStates: { count: 0 },
debug: true // Active les logs pour ce hook
});
st.set('count', 1);
// Console: [STATE] SET count => 1
useGlobalStates
const gst = useGlobalStates();
gst.local.set('user', userData);
// Console: [GLOBAL STATE] SET user => {...}
useDb
const db = useDb({
name: 'myApp',
stores: { items: 'id++' },
debug: true
});
await db.items.add({ name: 'Item' });
// Console: [DB] CREATE key = 1, item = {...}
useApi
// Avec api.debug: true dans la config
api.private.get('items');
// Console: [GET - LOADING] https://api.example.com/items
// Console: [GET - 200] https://api.example.com/items
Debug conditionnel
Activez le debug uniquement pour certains hooks :
// Debug global désactivé
const config = { debug: false };
// Mais debug activé pour un hook spécifique
const st = useStates({
initialStates: { ... },
debug: true // Override la config globale
});
Console du navigateur
Les logs SmartCommon utilisent des styles CSS dans la console. Pour les voir correctement :
- Ouvrez les DevTools (F12)
- Allez dans l'onglet “Console”
- Assurez-vous que le filtre “Verbose” est activé
Filtrer les logs
Dans la console, utilisez le filtre pour afficher uniquement certains types :
- Tapez
STATEpour voir les logs d'état - Tapez
APIpour voir les logs API - Tapez
DBpour voir les logs base de données
Bonnes pratiques
Désactiver en production
const config = {
debug: import.meta.env.DEV,
api: {
debug: import.meta.env.DEV
}
};
Logs personnalisés dans vos composants
import { log } from '@cap-rel/smartcommon';
import { useLibConfig } from '@cap-rel/smartcommon';
const MyComponent = () => {
const { debug } = useLibConfig();
const handleClick = () => {
if (debug) {
log.custom('MY_COMPONENT', 'teal', 'Button clicked');
}
// ...
};
};
Ne pas logger de données sensibles
// Mauvais
log.info('User logged in:', { password: user.password });
// Bon
log.info('User logged in:', { id: user.id, email: user.email });
Voir aussi
- Configuration - Configuration du Provider
- Hooks - Documentation des hooks