我有一个一直在使用 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,
}