anchor.diff:  To avoid forgetting to do housekeeping afterwards, we can use a try-with-resource construct:
   [source,java]
   ----
  -try(MDC.MDCCloseable mdc = MDC.putCloseable("userId", "gquintana")) {
  +try(MDC.MDCCloseable mdc = MDC.putCloseable("user", "gquintana")) {
   	demoLogger.info("Hello world!");
   }
   ----
  
positive.code:   "@timestamp": "2017-11-25T21:10:29.178+01:00",
    "@version": 1,
    "message": "Hello world!",
    "logger_name": "logodyssey.DemoLogger",
    "thread_name": "Thread-1",
    "level": "INFO",
    "level_value": 20000,
  
negative.code: 
  I stumbled upon the term "structured logging" reading https://kartar.net/2015/12/structured-logging/[a 2015 blog post by James Turnbull], 
  it's an interesting but not a new concept. 
  I also discovered Python  and .Net developpers had a library dedicated to *structured logging*: http://www.structlog.org[structlog] and https://serilog.net/[serilog].
  
  In this article I will describe how to do structured logging in Java with usual logging libraries like SLF4J et Logback.
  
  == Structured logging with SLF4J
  
  All Java developpers know how to log a message:
  [source,java]
  ----
  Logger demoLogger = LoggerFactory.getLogger("logodissey.DemoLogger");
  demoLogger.info("Hello world!");
  ----
  
  Properly configured, it produces a log like
  [source]
  ----
  21:10:29.178 [Thread-1] INFO  logodissey.DemoLogger - Hello world!
  ----
  Notice, this "Hello world!" message is qualified with several fields:
  
  