Logback.groovy LogstashEncoder正在更改字段名称



我有一个logback.groovy,它通过一些自定义字段将数据发送到网络上的logstash:

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

到目前为止还不错。然而,我需要清理一些对下游弹性搜索无效的字段名。基于LogstashEncoder文档,可以这样实现:

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

这看起来很棒,但我必须将其放入logback.groovy表示法中。我尝试过使用hashmap、string等,但最终总是使用Cannot cast object 'xxxx' with class 'xxxx' to class 'net.logstash.logback.fieldnames.LogstashFieldNames'

尝试以下操作。您可能还需要为FieldNamesLifeCycle 添加一些导入

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网站上的以下帮助器页面将XML配置转换为Groovy。

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

尽管我使用的是LoggingEventCompositeJsonEncoder编码器,但我也不得不做一些类似的事情。

我不得不使用的方法是挖掘logstash logback编码器代码,以计算出所涉及的真实类。值得庆幸的是,IntelliJ的反编译器让这一切变得不太痛苦。

如果你看看LogstashEncoder,它有一个方法public void setFieldNames(LogstashFieldNames fieldNames),所以你需要的是LogstashFieldNames 的一个实例

LogstashFieldNames反过来为setTimestamp和其他部分设置了setter,所以在groovy中,您的语法应该是:

    encoder(LogstashEncoder) {
        fieldNames(LogstashFieldNames) {
            timestamp = "time"
            message = "msg"
        }
    }

这对我来说很好;logger_name"至";loggerName";

import net.logstash.logback.fieldnames.LogstashFieldNames
appender('STDOUT', ConsoleAppender) {   
     encoder(net.logstash.logback.encoder.LogstashEncoder) {
          
            // Rename standard fields
            fieldNames = new LogstashFieldNames(logger:"loggerName")
     }
}

相关内容

  • 没有找到相关文章

最新更新