8

いくつかのカスタム フィールドを使用してネットワーク上のログスタッシュにデータを送信する logback.groovy があります。

appender("LOGSTASH", LogstashTcpSocketAppender) {
  encoder(LogstashEncoder) {
    customFields = """{ "token": "xxxxx", "environment":"dev", "some_property":"foobar" }"""
  }
  remoteHost = "logstashlistener.host.name"
  port = 5000
}

ここまでは順調ですね。ただし、elasticsearch ダウンストリームでは無効なフィールド名をクリーンアップする必要があります。LogstashEncoder のドキュメントに基づいて、これは次のように実現できます。

<encoder class="net.logstash.logback.encoder.LogstashEncoder">
  <fieldNames>
    <timestamp>time</timestamp>
    <message>msg</message>
    ...
  </fieldNames>
</encoder>

これは素晴らしいようですが、これを logback.groovy 表記に合わせる必要があります。ハッシュマップ、文字列などとして試しましたが、常に最終的にはCannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'

4

3 に答える 3

2

以下を試してください。FieldNamesとのインポートを追加する必要がある場合もありますLifeCycle

appender("LOGSTASH", LogstashTcpSocketAppender) {
  encoder(LogstashEncoder) {
    customFields = """{ "token": "xxxxx", "environment":"dev", "some_property":"foobar" }"""

    FieldNames... aFieldNames = new FieldNames()
    aFieldNames.timestamp = "time"
    aFieldNames.message = "msg"
    if(aFieldNames instanceof LifeCycle)
      aFieldNames.start()
    fieldNames = aFieldNames
  }
  remoteHost = "logstashlistener.host.name"
  port = 5000
}

Logback Web サイトの次のヘルパー ページを使用して、XML 構成を Groovy に変換できます。

http://logback.qos.ch/translator/asGroovy.html

于 2016-04-25T05:18:40.283 に答える