{
  "nlog": {
    "throwConfigExceptions": true,
    "variables": { "logname": "..\\sequence" },
    "extensions": [{ "assembly": "NLog.Targets.ElasticSearch" }],
    "targets": {
      "jsonTarget": {
        "type": "File",
        "fileName": "${basedir:fixtempdir=true}\\${logname}.log.json",
        "layout": {
          "type": "JsonLayout",
          "includemdlc": true,
          "Attributes": [
            { "name": "level", "layout": "${level}" },
            { "name": "ts", "layout": "${date}" },
            { "name": "caller", "layout": "${ndlc:separator=\\\\}" },
            { "name": "msg", "layout": "${message}" },
            {
              "name": "properties",
              "encode": false,
              "layout": {
                "type": "JsonLayout",
                "includeallproperties": "true"
              }
            }
          ]
        }
      },
      "fileTarget": {
        "type": "File",
        "fileName": "${basedir:fixtempdir=true}\\${logname}.log",
        "layout": "${date} ${level:uppercase=true} ${message} ${exception}"
      },
      "consoleInfo": { "type": "Console", "layout": "${date} ${message}" },
      "consoleError": {
        "type": "Console",
        "layout": "${date} ${level:uppercase=true} ${message}",
        "error": true
      },
      "elastic": {
        "type": "BufferingWrapper",
        "flushTimeout": "5000",
        "target": {
          "type": "ElasticSearch",
          "uri": "http://localhost:9200",
          "index": "${logname}-${date:format=yyyy.MM.dd}",
          "fields": [
            { "name": "level", "layout": "${level:uppercase=true}" },
            {
              "name": "stepName",
              "layout": "${event-properties:StepName}"
            },
            { "name": "message", "layout": "${message}" },
            {
              "name": "result",
              "layout": "${event-properties:Result}"
            },
            {
              "name": "parameters",
              "layout": "${event-properties:Parameters}"
            },
            {
              "name": "error",
              "layout": "${event-properties:Error}"
            },
            {
              "name": "location",
              "layout": "${event-properties:Location:objectpath=AsString}"
            }
          ]
        }
      }
    },
    "rules": [
      {
        "logger": "*",
        "minLevel": "Error",
        "writeTo": "fileTarget,consoleError,jsonTarget,elastic",
        "final": true
      },
      {
        "logger": "*",
        "minLevel": "Info",
        "writeTo": "consoleInfo"
      },
      {
        "logger": "*",
        "minLevel": "Debug",
        "writeTo": "fileTarget,jsonTarget,elastic"
      }
    ]
  }
}
