title: Serilog: Request Id implementation
body: <p>Lately I have configured Serilog to play nice with ASP.NET Core 2 MVC app and next task is to trace incoming request to web app on every layer of the system. So basically, we want to propagate some token (like <code>RequestId</code> generated by Serilog to lower layers of application).</p>
  
  <pre class="lang-json prettyprint-override"><code>"Serilog": {
      "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" ],
      "MinimumLevel": {
        "Default": "Debug",
        "Override": {
          "Microsoft": "Warning"
        }
      },
      "WriteTo": [
        {
          "Name": "RollingFile",
          "Args": {
            "pathFormat": "log-{Hour}.txt",
            "fileSizeLimitBytes": "",
            "retainedFileCountLimit": "",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Application}] [{Level}] [{RequestId}] - {Message}{NewLine}{Exception}"
          }
        }
      ],
      "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
      "Properties": {
        "Application": "MultilayerApp"
      }
  },
  </code></pre>
  
  <p>In logs we have nice input like</p>
  
  <pre class="lang-none prettyprint-override"><code>2018-01-19 14:06:01.165 +00:00 [App] [Warning] [0HLAV6PIMA9M0:00000001] - Accessing expired session, Key:"6e7f3ab5-db62-335d-1bc7-6824e5b918f5"
  </code></pre>
  
  <p>But my question is where in Serilog is implementation of <code>RequestId</code> enricher? Honestly I can't find it.</p>