在logback-elasticsearch-appender

时间:2018-04-04 12:17:24

标签: java elasticsearch kibana logback

每个人都可以在GitHub page中看到属性标记的内部类型标记,该标记应该告诉Elasticsearch是否为值该属性应该写成一个字符串,数字......在生成的JSON中(至少是我所理解的):

  

type(可选,默认String):结果字段的类型   JSON消息。可能的值有:String,int,float和boolean。

但我无法使其发挥作用。

这是我的logback.xml文件的片段:

<appender name="ELASTIC" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
...
    <property>
        <name>elapsed time (ms)</name>
        <value>%X{elapsedTime}</value>
        <type>int</type>
    </property>
...
</appender>

我正在使用JoranConfigurator配置回溯:

String logConfigurationPath = "logback.xml";
if (logConfigurationPath != null) {
  LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();

  try {
    JoranConfigurator config = new JoranConfigurator();

    config.setContext(context);

    context.reset();

    config.doConfigure(logConfigurationPath);
  } catch (JoranException je) {

  }
  StatusPrinter.printInCaseOfErrorsOrWarnings(context);
}

Logback配置正常,但当它尝试处理 type 标记时出现错误:

testingdocker                | 09:46:13,134 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@68:23 - no applicable action for [type], current ElementPath  is [[configuration][appender][properties][property][type]]

并且Elastic将生成的JSON中的标记设置为String,我可以在Kibana中查看。

如何正确使用该标签,以便从Logback中获取Kibana中的数字类型?

1 个答案:

答案 0 :(得分:0)

似乎是附加程序中的错误。

如果看到Property.java,将看到:

public void setType(String type) {
    try {
        this.type = Enum.valueOf(Type.class, type.toUpperCase());
    } catch (IllegalArgumentException e) {
        this.type = Type.STRING;
    }
}

因此,如果您设置的内容不在Enum中,它将使用String。这可以。这样我们就可以看到有关类型:

public enum Type {
     STRING, INT, FLOAT, BOOLEAN
}

我认为这是您的问题! ElasticSearch不接受类型“ int”,但接受“ integer”。

有关数据类型的更多信息: