使用 NLog 4.5 将结构化数据记录到 Elastic Search 不提供在字段中查询的能力
Log Structured data to Elastic Search by using NLog 4.5 doesn't provide the ability to query in the fields
使用 NLog,当我将对象/"structured data" 记录到 Elastic Search 时,它存储在我无法对其进行查询的地方,请看下图:
<target xsi:type="ElasticSearch"
name="MyElasticTarget"
uri="url"
requireAuth="true"
username="MyUser"
password="MyPass"
Index="MyIndex-${date:format=yyyy.MM.dd}"
>
<layout xsi:type="JsonLayout" type='JsonLayout' IncludeAllProperties='true'>
<attribute name='LogMessage' layout='${MySimpleClass:raw=true}' />
</layout>
</target>
</targets>
代码是:
var _simpleObj = new MySimpleClass(5, "my structured Simple obj", "Sometype");
var logger = LogManager.GetLogger("Example");
logger.Info("{@MySimpleClass}", _simpleObj );
当我 log/store 使用 SeriLog 的相同结构化数据时,我可以进行查询,因为我的对象字段超出了消息范围并且作为字段,请看下图:
知道如何记录结构化数据(对象)以便能够使用 NLog 查询它们吗?
我认为你应该使用 Logstash 过滤器来解码你的 json 字符串。我不知道 NLog 是否支持 Logstash 过滤器,但有更好更强大的工具可以满足您的需求。 Log4Net 是一个非常强大且广泛使用的库,并且有一个很好的 Elasticsearch appneder 库,它是支持 Logstash 过滤器的 Log4Stash。它高效且易于使用。请参阅下面的 link
http://devthings.com.ua/logging-in-asp-net-web-api-using-log4net-and-elasticsearch/
您是否尝试为 NLog target:
启用 includeAllProperties 属性
<target xsi:type="ElasticSearch" includeAllProperties="true" />
您还可以添加自己的自定义字段:
<target xsi:type="ElasticSearch" includeAllProperties="true">
<field name="messageTemplate" layout="${message:raw=true}" />
</target>
使用 NLog,当我将对象/"structured data" 记录到 Elastic Search 时,它存储在我无法对其进行查询的地方,请看下图:
<target xsi:type="ElasticSearch"
name="MyElasticTarget"
uri="url"
requireAuth="true"
username="MyUser"
password="MyPass"
Index="MyIndex-${date:format=yyyy.MM.dd}"
>
<layout xsi:type="JsonLayout" type='JsonLayout' IncludeAllProperties='true'>
<attribute name='LogMessage' layout='${MySimpleClass:raw=true}' />
</layout>
</target>
</targets>
代码是:
var _simpleObj = new MySimpleClass(5, "my structured Simple obj", "Sometype");
var logger = LogManager.GetLogger("Example");
logger.Info("{@MySimpleClass}", _simpleObj );
当我 log/store 使用 SeriLog 的相同结构化数据时,我可以进行查询,因为我的对象字段超出了消息范围并且作为字段,请看下图:
知道如何记录结构化数据(对象)以便能够使用 NLog 查询它们吗?
我认为你应该使用 Logstash 过滤器来解码你的 json 字符串。我不知道 NLog 是否支持 Logstash 过滤器,但有更好更强大的工具可以满足您的需求。 Log4Net 是一个非常强大且广泛使用的库,并且有一个很好的 Elasticsearch appneder 库,它是支持 Logstash 过滤器的 Log4Stash。它高效且易于使用。请参阅下面的 link
http://devthings.com.ua/logging-in-asp-net-web-api-using-log4net-and-elasticsearch/
您是否尝试为 NLog target:
启用 includeAllProperties 属性<target xsi:type="ElasticSearch" includeAllProperties="true" />
您还可以添加自己的自定义字段:
<target xsi:type="ElasticSearch" includeAllProperties="true">
<field name="messageTemplate" layout="${message:raw=true}" />
</target>