feat: implement structured logging system #157

Open
opened 2026-06-09 10:21:40 +00:00 by djalim · 0 comments
Collaborator

Contexte

Actuellement, le logging dans routes/_middleware.ts utilise de simples console.log / console.error. C'est fonctionnel mais limité : pas de niveaux de log configurables, pas de formatage structuré (JSON), pas de destination configurable, et difficile à filtrer en production.

Objectif

Remplacer les console.log par un système de log structuré basé sur @std/log (standard Deno).

Tâches

  • Créer un module toolbox/logger.ts exportant un logger configuré
  • Supporter les niveaux : DEBUG, INFO, WARN, ERROR
  • Format JSON en production, format lisible en dev
  • Remplacer les console.log du middleware par le logger
  • Logger les erreurs critiques (auth, accès refusé, exceptions non gérées)
  • Configurer le niveau via variable d'environnement LOG_LEVEL

Exemple d'implémentation

// toolbox/logger.ts
import * as log from "@std/log";

const level = (Deno.env.get("LOG_LEVEL") ?? "INFO") as log.LevelName;
log.setup({
  handlers: { console: new log.ConsoleHandler(level) },
  loggers: { default: { level, handlers: ["console"] } }
});
export const logger = log.getLogger();

Utilisation dans le middleware

// routes/_middleware.ts
import { logger } from "$root/toolbox/logger.ts";

logger.info(`--> ${method} ${path}`);
logger.error(`<-- ${method} ${path} ERROR (${duration}ms)`, error);
## Contexte Actuellement, le logging dans `routes/_middleware.ts` utilise de simples `console.log` / `console.error`. C'est fonctionnel mais limité : pas de niveaux de log configurables, pas de formatage structuré (JSON), pas de destination configurable, et difficile à filtrer en production. ## Objectif Remplacer les `console.log` par un système de log structuré basé sur `@std/log` (standard Deno). ## Tâches - [ ] Créer un module `toolbox/logger.ts` exportant un logger configuré - [ ] Supporter les niveaux : `DEBUG`, `INFO`, `WARN`, `ERROR` - [ ] Format JSON en production, format lisible en dev - [ ] Remplacer les `console.log` du middleware par le logger - [ ] Logger les erreurs critiques (auth, accès refusé, exceptions non gérées) - [ ] Configurer le niveau via variable d'environnement `LOG_LEVEL` ## Exemple d'implémentation ```ts // toolbox/logger.ts import * as log from "@std/log"; const level = (Deno.env.get("LOG_LEVEL") ?? "INFO") as log.LevelName; log.setup({ handlers: { console: new log.ConsoleHandler(level) }, loggers: { default: { level, handlers: ["console"] } } }); export const logger = log.getLogger(); ``` ## Utilisation dans le middleware ```ts // routes/_middleware.ts import { logger } from "$root/toolbox/logger.ts"; logger.info(`--> ${method} ${path}`); logger.error(`<-- ${method} ${path} ERROR (${duration}ms)`, error); ```
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/PolyMPR#157