每个人都可以在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中的数字类型?
答案 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”。
有关数据类型的更多信息: