Utilisation
Initialiser
Kino.init() s'appelle une seule fois, au démarrage. Un second appel lève une erreur, et les méthodes de log lèvent une erreur tant qu'il n'a pas été appelé.
import Kino from '@fca.gg/kino';
Kino.init({
locale: 'fr-FR',
defaultIntanceTitle: 'BOT',
});
locale(défaut :'en-US') : langue du format de date des lignes.defaultIntanceTitle(défaut :'GLOBAL') : nom du logger global. L'option s'écrit bien ainsi, sans « s ».sentry,packages,ANR,autoCaptureUnhandledRejections: voir Sentry.
Niveaux
Chaque niveau écrit sur la sortie correspondante de la console, avec sa couleur :
log(cyan) etsuccess(vert) :console.log;info(blanc) :console.info;warn(jaune) :console.warn;error(rouge) :console.error;debug(bleu) :console.debug.
Chaque ligne est préfixée par la date, le module et le niveau :
[24/09/2026 18:02:11 - Commands - WARN] Commande inconnue : /pnig
Les méthodes acceptent plusieurs valeurs : chacune est écrite sur sa ligne, et les objets sont affichés en détail (sur trois niveaux de profondeur).
Kino.warn('Réponse inattendue', {status: 429, retryAfter: 2});
Logger global et loggers par module
Les méthodes statiques utilisent le logger global :
Kino.info('Connecté à la gateway');
Kino.error(new Error('Échec de la connexion'));
Pour savoir d'où vient une ligne, créez un logger par module. Son nom remplace celui du logger global dans le préfixe, et sert de tag module dans Sentry :
const logger = new Kino('Database');
logger.debug('Requête exécutée en 12 ms');
KinoLoggedClass
Une classe qui étend KinoLoggedClass reçoit une propriété logger protégée, nommée d'après la classe, disponible dans les méthodes statiques comme dans celles d'instance :
import {KinoLoggedClass} from '@fca.gg/kino';
class TicketManager extends KinoLoggedClass {
public open(userId: string) {
this.logger.info(`Ticket ouvert pour ${userId}`); // module "TicketManager"
}
public static cleanup() {
this.logger.warn('Nettoyage des tickets expirés');
}
}
Le logger est créé au premier accès, puis partagé par toute la classe.
Erreurs
error() écrit l'erreur et, si Sentry est configuré, l'envoie avec le module en tag. Un second argument ajoute du contexte :
logger.error(error, {
tags: {command: 'ban'},
extras: {guildId: interaction.guildId},
user: {id: interaction.user.id, username: interaction.user.username},
});
Tracer une opération
trace(uid) renvoie une fonction à passer en gestionnaire d'erreur. Elle envoie l'erreur avec un tag trace_uid, pour retrouver dans Sentry toutes les erreurs d'une même opération :
const onError = logger.trace(interaction.id, {tags: {command: 'ban'}});
await member.ban().catch(onError);
La version statique, Kino.trace(uid), ne prend pas de contexte.