c# - 使用 Log4Net 时将整数值存储到 ElasticSearch

标签 c# elasticsearch asp.net-web-api log4net elasticsearch-2.0

我正在 ElasticSearch 中记录用户操作,并且正在使用 C# Log4Net

我正在使用 C# NEST 库来访问 ElasticSearch 数据库。

我的日志行如下所示:

{
      "_index" : "log-2016.07.27",
      "_type" : "logEvent",
      "_id" : "AVYrwmW5Hc5CAgECpn_X",
      "_score" : 1.0,
      "_source" : {
        "timeStamp" : "2016-07-27T09:49:35.3774113Z",
        "message" : "Upload file operation took 11683 ms",
        "loggerName" : "Reviewer.Web.WebApi.GroupsController",
        "identity" : "",
        "level" : "INFO",
        "properties" : {
          "log4net:UserName" : "CORP\\g",
          "log4net:ElapsedTime" : "11683",
          "log4net:Identity" : "",
          "IP" : "::1",
          "log4net:HostName" : "GBWOTIOM68052D",
          "@timestamp" : "2016-07-27T09:49:35.3774113Z"
        }
      } 

我想要 log4net:ElapsedTime值存储为整数而不是字符串。

目前我在存储耗时时这样做:
long ms = 1000;
LogicalThreadContext.Properties["log4net:ElapsedTime"] = ms;

我知道我应该指定一个模板,以便告诉 ElasticSearch 将经过的值存储为整数,但该怎么做呢?

最佳答案

如果您希望 elasticsearch 识别您的字段,您应该发送不带双引号的数据值。

curl -XPUT 'localhost:9200/tmp/tmp/1' -d '{
   "field1":"3",
   "field2":3
}'

-
curl -XGET 'localhost:9200/tmp'
{"tmp":{"aliases":{},"mappings":{"tmp":{"properties":{"field1":{"type":"string"},"field2":{"type":"long"}}}},"settings":{"index":{"creation_date":"1469621916488","uuid":"Qj64-CU5RUW6ShOyRqLZXQ","number_of_replicas":"0","number_of_shards":"1","version":{"created":"1070599"}}},"warmers":{}}}

您可以看到 field1 是字符串,但 field2 是数字。

关于c# - 使用 Log4Net 时将整数值存储到 ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609801/

相关文章:

c# - 如何很好地从 IEnumerable<T> 转换为 List<T>?

c# - 获取完整的英文月份名称

java - ElastichSearchRestTemplate 忽略可分页

php - ElasticSearch索引的“建议”映射不会返回结果

c# - 如何使用 CURL 或 ARC 向受 Azure AD 授权保护的 Web Api 发出请求

c# - 使用基于文本文件的事件创建 C# 表单字段

c# - 如何捕获异常并继续程序? C#

Elasticsearch 多个聚合不起作用

asp.net-mvc - 如何将 ControllerContext 传递给属性

asp.net-web-api - WebApi2属性路由404