1

我有一个一直在使用 nlog 的半大型项目,并且在整个过程中,我为不同的数据类型重新使用了很多字段名称。我开始将我的日志(包括所有日志属性/字段)发送到 ElasticSearch,现在它开始困扰我。我注意到如果 ElasticSearch 无法将字段转换为它的数据类型,它只会完全删除日志。动态索引映射根据首先看到的内容来决定数据类型。

无论如何我可以告诉索引使用像字符串这样的默认数据类型吗?

附言; 该实例是云托管的,我通过 Kibana 访问它,我不知道在哪里可以找到一个日志,告诉我它是否/何时丢弃日志以解析错误。

编辑

索引映射

PUT /indexName
{
  "mappings": {
      "properties": {
        "@domain": {
          "type": "keyword"
        },
        "@logTarget": {
          "type": "keyword"
        },
        "@logger": {
          "type": "keyword"
        },
        "@memUsage": {
          "type": "long"
        },
        "@processID": {
          "type": "integer"
        },
        "@serviceGUID": {
          "type": "keyword"
        },
        "@timestamp": {
          "type": "date"
        },
        "level": {
          "type": "keyword"
        },
        "message": {
          "type": "text"
        }
      }
  }
}

不幸的是,我不知道将日志推送到弹性的 api,但这里有一些示例说明它们的外观。这些不是最好的例子,但它们显示了字段名称的重叠/重用。

示例 1:

//NLog structured log
logger.LogInfo("That Lady has {count} cats", 5);
//JSON Object
{
    "@domain": "Service1",
    "@logTarget": "None",
    "@logger": "AppName.Program.Main",
    "@memUsage": 100,
    "@processID": 17000,
    "@serviceGUID": 0,
    
    "level": "INFO",
    "message": "That Lady has 5 cats",
    
    "count": 5,
}

示例 2:

//NLog structured log
int count = 3;
logger.LogInfo("Loaded {count}", count + " dogs");
//JSON Object
{
    "@domain": "Service1",
    "@logTarget": "None",
    "@logger": "AppName.Program.Main",
    "@memUsage": 100,
    "@processID": 17000,
    "@serviceGUID": 0,
    
    "level": "INFO",
    "message": "Loaded "5 dogs"",
    
    "count": 5,
}

示例 3:

//NLog structured log
object count = nil;
logger.LogInfo("Value is {count}", count);
//JSON Object
{
    "@domain": "Service1",
    "@logTarget": "None",
    "@logger": "AppName.Program.Main",
    "@memUsage": 100,
    "@processID": 17000,
    "@serviceGUID": 0,
    
    "level": "INFO",
    "message": "Loaded "5 dogs"",
    
    "count": 5,
}
4

0 回答 0