Hello,

In JTL, we employ two templating languages within each other. Consider
the following GelfLayout.json:

    {
      "version": "1.1",
      "host": "${hostName}",
      "short_message": "${json:message}",
      "full_message": "${json:exception:stackTrace:text}",
      "timestamp": "${json:timestamp:epoch:secs}",
      "level": "${json:level:severity:code}",
      "_logger": "${json:logger:name}",
      "_thread": "${json:thread:name}",
      "_mdc": "${json:mdc:flatten=_,stringify}"
    }

First, a JSON template denoting the will be emitted JSON structure.
Second, a key-value pair configuration language. See the
"${json:mdc:flatten=_,stringify}" directive? How one would parse
"flatten" parameter here? What if it contains double-quotes, commas,
etc. I have already implemented an ad-hoc StringParameterParser to
read such parameters. Though I am really hesitant to employ this
further for two main reasons:

1. Every custom parser is a fertile ground to injection attacks.

2. Its capabilities are limited: no types, no structural nesting, etc.

For this purpose, I have been considering re-using the JSON also to
pass parameters to the resolvers and render the 2nd DSL redundant:

    {
      "version": "1.1",
      "host": "${hostName}",
      "short_message": {
        "$resolver": "message"
      },
      "full_message": {
        "$resolver": "exception",
        "type": "stackTrace",
        "output": "text"
      },
      "timestamp": {
        "$resolver": "timestamp",
        "type": "epoch",
        "unit": "secs"
      },
      "level": {
        "$resolver": "level",
        "type": "severity",
        "field": "code"
      },
      "_logger": {
        "$resolver": "logger",
        "field": "name"
      },
      "_thread": {
        "$resolver": "thread",
        "field": "name"
      },
      "_mdc": {
        "$resolver": "mdc",
        "flatten": {
          "prefix": "_"
        },
        "stringify": true
      }
    }

Due to existing users, I kept on postponing this idea in
LogstashLayout. Though I feel like this is a good time to bring it up
again. What do you think?

Kind regards.

Reply via email to