Le log doit raconter une opération, pas remplir le disque
Mon passage chez NOVIPRO à Paris se termine ce mois-ci. Sur les systèmes de positionnement et tablettes Windows durcies, un besoin revenait : quand le logiciel roule loin de l’équipe, il doit laisser assez d’information pour qu’on comprenne ce qu’il a fait.
Un log utile est un événement, pas une phrase improvisée. Il porte un type, un temps UTC, la version, l’appareil, l’opération, l’étape, la durée et le résultat. Un identifiant de corrélation relie l’action locale, la requête réseau et la transaction serveur.
Suivre une synchronisation qui casse
Un diagnostic devrait pouvoir reconstruire cette suite :
inspection.saved— identifiant 471, version locale 3;sync.start— corrélation A92, réseau radio;auth.ok— 180 ms;upload.timeout— tentative 1, aucun reçu;sync.retry_scheduled— attente 30 s;upload.duplicate_ack— serveur avait déjà reçu 471;inspection.confirmed— version serveur 8.
Cette trace explique pourquoi l’idempotence compte. Le premier envoi a peut-être réussi malgré la réponse perdue. Le second ne doit pas créer une autre inspection. Sans identifiant stable, l’équipe voit seulement deux appels et ne sait pas s’ils représentent deux actions.
Les niveaux de log servent à contrôler le volume : erreur pour une opération perdue, avertissement pour un repli, information pour les jalons et debug pour le détail temporaire. Activer debug en permanence peut remplir le disque, ralentir l’appareil et noyer le signal. Une configuration distante limitée dans le temps aide à enquêter.
L’appareil doit protéger sa propre survie
En mode déconnecté, les événements vont dans une file circulaire locale. Quand la limite est atteinte, le système conserve erreurs et agrégats récents plutôt que de bloquer le métier. À la reconnexion, il compresse et envoie par lots. L’envoi des logs ne doit jamais empêcher celui des données d’inspection; les priorités sont différentes.
L’horloge peut dériver. Enregistrer un compteur monotone et un numéro de séquence permet de mesurer des durées et de remettre les événements locaux en ordre. Le serveur ajoute aussi son heure de réception. Les versions du schéma d’événement permettent au collecteur de lire les anciens appareils.
Il faut exclure mots de passe, jetons, contenu libre et positions exactes non nécessaires. Les fichiers locaux sont chiffrés, les transferts protégés et l’accès au collecteur audité. Une rétention par type évite de garder des traces personnelles juste parce que le disque est grand.
Transformer le diagnostic en contrat de support
Chaque code d’erreur devrait mener à une action. AUTH_EXPIREE invite l’utilisateur à renouveler sa session; DONNEE_REJETEE nomme le champ; SERVEUR_INJOIGNABLE garde l’opération dans la file. Le support reçoit le même code et un identifiant, sans demander une photo vague de l’écran. Je maintiendrais une table reliant code, sévérité, propriétaire et runbook, puis un test vérifierait que le client n’affiche pas une trace interne. Cette discipline sépare le message humain, stable et traduisible, du détail technique qui peut évoluer à chaque version.
Je construirais les événements en même temps que les scénarios de reprise : connexion perdue, batterie coupée, conflit et serveur lent. Après chaque test, une autre personne doit pouvoir expliquer ce qui s’est passé uniquement avec les traces. Si elle doit appeler l’auteur du code, le logiciel ne raconte pas encore assez bien son opération.