anchor.diff:  public class CustomJsonLayout extends JsonLayout {
       @Override
       protected void addCustomDataToJsonMap(Map<String, Object> map, ILoggingEvent event) {
  -        map.put("application", "log-odyssey");
  +        map.put("application", "log-odissey");
           try {
               map.put("host", InetAddress.getLocalHost().getHostName());
           } catch (UnknownHostException e) {
  
positive.code:     }
  }
  ----
  Several Maven dependencies are required `ch.qos.logback.contrib:logback-json-classic:0.1.5`, 
  `ch.qos.logback.contrib:logback-jackson:0.1.5` and `com.fasterxml.jackson.core:jackson-databind`
  for this library to work.
  
  In the end both libraries are similar, both are based on the Jackson library and produce one JSON document per line.
  This format is known as http://ndjson.org/[NDJSON] or and http://jsonlines.org/[JSON Lines].
  Logstash and Filebeat can easily read this kind of JSON file.
  
negative.code: demoLogger.info("Hello world!");
  MDC.remove("userId");
  ----
  The MDC is a map-like object filled in the Java code and used in the backend logging library to output custom data.
  With the adequate configuration, we can get the user Id the log:
  [source]
  ----
  21:10:29.178 [Thread-1] gquintana INFO  logodissey.DemoLogger - Hello world!
  ----
  The MDC can store any information about the user (user Id, session Id, token Id), about the current request (request Id, transaction Id), about long running threads (batch instance Id, broker client Id). 
  Later on, this information will be part of the log.
  
  Having this kind of information allows to group logs by user, by request, by processing.
  Remember that logs may be scattered across differents servers, on different time periods. 
  In short it allows to correlate logs belonging to the same scenario and find answers to questions like "what was the user X doing when he met this nasty error?"
  
  Let's get back to the example, we saw the MDC stores extra information about logs.
  