Passer au contenu principal
LogBrew est une plateforme d’observabilité pour les développeurs et les agents de codage, avec une offre gratuite généreuse et sans carte bancaire. Les logs structurés décrivent chaque enregistrement par des champs nommés, pas par une ligne de texte libre. Un programme, une personne ou un agent de codage peut alors filtrer les enregistrements par champ, les compter et les relier à la trace d’une requête.

Logs texte et logs structurés

Ce log texte contient les mêmes faits que le log structuré en dessous.
Pour trouver dans le log texte tous les paiements échoués d’une commande, vous devez écrire un motif pour chaque variante du message. Dans le log structuré, vous filtrez sur message et order_id. Le message reste le même pour chaque commande. Vous pouvez donc aussi le compter.

Choisir un format de log

Utilisez JSON, avec 1 objet par ligne. Utilisez les mêmes noms de champs dans tous les services. Ce tableau liste les champs de base et les noms correspondants dans le modèle de données de log d’OpenTelemetry et dans LogBrew. Les valeurs de gravité d’OpenTelemetry vont de 1 à 24. INFO commence à 9, WARN à 13, ERROR à 17 et FATAL à 21. LogBrew accepte directement les logs OTLP. Consultez Envoyer des données OpenTelemetry.

Bonnes pratiques de logging

Garder un message fixe

Écrivez "payment failed" et placez l’ID de commande dans un champ. Un message fixe permet de regrouper, de compter et d’alerter sur 1 seul type de log.

Utiliser 1 nom par champ

Choisissez order_id ou orderId une fois, et utilisez-le dans tous les services. Pour les champs courants, utilisez les noms des conventions sémantiques d’OpenTelemetry, comme http.response.status_code.

Choisir le niveau selon l’action requise

error signifie qu’une opération a échoué. warning signifie que le programme s’est rétabli. info confirme un fonctionnement normal. Utilisez debug seulement pendant un diagnostic.

Écrire l’heure en UTC

Utilisez RFC 3339 avec millisecondes et décalage horaire, comme 2026-11-07T14:21:19.773+00:00. Sans UTC ni millisecondes, les enregistrements de fuseaux horaires différents, ou de la même seconde, se classent dans le mauvais ordre.

Ajouter l’ID de trace et l’ID de span

Avec ces ID, vous lisez tous les logs d’une seule requête à travers les services.

Définir le service, l’environnement et la version une seule fois

Configurez-les au démarrage, pas dans chaque appel. Sans version, vous ne savez pas quel déploiement a causé un changement.

Écrire une erreur une seule fois dans les logs, là où vous la gérez

Ajoutez le type et le message de l’erreur. N’écrivez pas la même erreur à chaque couche.

Exclure les secrets et les données personnelles

N’écrivez dans les logs ni mots de passe, ni jetons, ni cookies, ni corps de requête, ni URL complètes avec leurs paramètres de requête. Utilisez la fonction de masquage de votre logger. Consultez Contrôler les données capturées.

Utiliser des noms de champs fixes

N’utilisez pas de valeurs comme noms de champs, par exemple {"ord_1001": "failed"}. Chaque nouvelle valeur ajoute alors un nouveau champ, et 1 filtre ne trouve pas toutes les commandes.

Écrire du JSON sur la sortie standard en production

Utilisez un format lisible seulement en développement.

Logs structurés en Python

Le module standard logging n’a pas de formatter JSON. Ce formatter écrit les champs de base et les valeurs de extra={"fields": {...}}.
Pour envoyer les mêmes enregistrements à LogBrew, ajoutez LogBrewLoggingHandler. Il envoie le message, le niveau et le logger comme champs, et les valeurs primitives de extra comme métadonnées. Consultez Logging Python.

Logs structurés en Node.js

Pino écrit par défaut 1 ligne JSON par enregistrement. Winston écrit du JSON avec winston.format.json(). Les deux gardent les champs de l’appel et des loggers enfants. Consultez Logging Node.js pour les deux configurations et pour l’ID de trace dans les logs Express.

Rechercher des logs structurés dans LogBrew

LogBrew stocke chaque log avec son message, son niveau, son logger, ses métadonnées et sa trace. Filtrez sur ces champs depuis la CLI.
L’API peut aussi filtrer sur des valeurs de métadonnées typées, comme un nombre supérieur ou égal à 500. Consultez Filtres de requête.