feat(logs): passer les logs au format logfmt conseillé par le CSIRT#90
Merged
Conversation
julienanne
approved these changes
Jul 13, 2026
julienanne
left a comment
Contributor
There was a problem hiding this comment.
Rien qui nécessite que je repasse dessus ;)
| # est exposé comme tag nommé pour apparaître en `request_id=…` sur chaque ligne. | ||
| # rails_semantic_logger remplace la stack de log ; l'appender `add` est créé dans | ||
| # tous les process (web, jobs, rake), pas seulement en mode serveur. | ||
| config.log_tags = {request_id: :request_id} |
Contributor
There was a problem hiding this comment.
On le met pas dans les env de dev et de test ?
| RSpec.describe "Structured logging configuration" do | ||
| it "formats every log through the logfmt formatter recommended by the CSIRT" do | ||
| formatters = SemanticLogger.appenders.map(&:formatter) | ||
|
|
Contributor
There was a problem hiding this comment.
Aucune idée si c'est possible mais j'aurais bien testé une ligne de log et aussi le request_id mais je ne suis pas sur que ce soit facilement testable capture de sortie and co jamais simple avec les spes parallélisées ?
Le SIEM du CSIRT attend des logs structurés parsables ; les logs Rails par défaut (multi-lignes, texte brut) ne le sont pas. rails_semantic_logger remplace la stack de log : logfmt en prod (request_id exposé en tag nommé) et en test, format couleur lisible en dev (surchargeable via LOG_FORMAT). Refs: #324
Aligne spec/requests/ sur les namespaces du monolithe modulaire : api/, portail/, et hubee/ pour ce qui est commun aux deux modules.
L'ancienne spec lisait SemanticLogger.appenders dans l'env de test : elle restait verte même en cassant le formatter de production. La nouvelle lit log/test.log — l'appender que l'app configure — sur une requête réelle, et vérifie le request_id porté par la réponse. config.log_tags passe en test pour que le tag existe à l'exécution.
damienlethiec
force-pushed
the
feat/logs-logfmt-csirt
branch
from
July 15, 2026 16:35
c127d95 to
92470ee
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexte
Le CSIRT recommande un format de log structuré, parsable par le SIEM. Les logs
Rails par défaut (multi-lignes, texte brut) ne le sont pas. Cette MR met l'app
V2 (API + Portail) en conformité, en s'inspirant de la MR admin-portal !178.
Changements
rails_semantic_logger: remplace la stack de log Rails.request_idexposé en tag nommé(
request_id=…) — une ligne structurée par requête au niveauinfo.log/test.log(exerce la vraie sérialisation sanspolluer la sortie RSpec).
RAILS_LOG_LEVELetLOG_FORMATsurchargeables pour prévisualiser le rendu prod en local.silence_healthcheck_path = "/up"préservé (middleware séparé en Rails 8.1,indépendant du logger swappé).
Points de décision
si besoin sur les cas complexes type backtraces :
formatter: :json, sansrefonte.
seulement les requêtes) et fournit l'event logging nativement ; les deux
outils sont par ailleurs incompatibles (même subscriber).
Tests
spec/config/logging_spec.rb) : tous les appenderssérialisent en logfmt.
bin/civert : 175 exemples / 0 échec, couverture 98,0 %, brakeman +bundler-audit + importmap clean, Cucumber E2E + seeds OK.
Points d'attention
ActiveSupport::Configurable is deprecated— émis par la railtie de
rails_semantic_logger, pas par notre code. Sansimpact fonctionnel en Rails 8.1 ; à surveiller avant un passage à Rails 8.2
(Renovate remontera le bump gem correctif).
Refs