Logs texte et logs structurés
Ce log texte contient les mêmes faits que le log structuré en dessous.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
Choisissezorder_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, comme2026-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 standardlogging n’a pas de formatter JSON. Ce formatter écrit les
champs de base et les valeurs de extra={"fields": {...}}.
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 avecwinston.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.
