Similar to metrics, logs often suffer from the lack of request-scoped context and their investigative power can be improved by capturing some of that context in the fields of structured log records.
Before we go further, let us briefly talk about structured logging. Traditionally, the logging frameworks generate the log lines as plain strings, an example of which you can see in the output of the Hello application clients:
25-11-2018 18:26:37.354 [main] ERROR client.Runner.runQuery - error from server 25-11-2018 18:26:37.468 [main] INFO client.Runner.runQuery - executing http://localhost:8080/sayHello/Bender 25-11-2018 18:26:37.531 [main] ERROR client.Runner.runQuery - error from server 25-11-2018 18:26:37.643 [main] INFO client.Runner.runQuery - executing http://localhost:8080/sayHello/Bender
While these strings do have a certain structure that can be parsed by the log aggregation pipeline, the actual messages are unstructured, making them more expensive...