gpt4 book ai didi

elasticsearch - ElasticsearchTransport使用变换来更改indexPrefix?

转载 作者:行者123 更新时间:2023-12-03 02:11:26 33 4
gpt4 key购买 nike

更新:我实际上可以使用以下代码更改indexPrefix,但是用于在Kibana中进行过滤的实际_index从原始indexPrefix中获取名称。更改indexPrefix方法中的transformer似乎为时已晚,因为_index已使用原始前缀创建。
我在nodejs / express设置中使用winstonwinston-elasticsearch,并希望使用相同的记录器登录到不同的索引(不同的indexPrefix)

const logger = winston.createLogger({
transports
});
传输是一系列不同的传输。其中之一是 ElasticsearchTransport,其中包含一些参数,例如 indexPrefixlevel等。通过传递 transformer方法作为参数,可以根据日志的类型更改级别。
    new winstonElastic.ElasticsearchTransport({
level: logLevel,
indexPrefix: getIndex(),
messageType: 'log',
ensureMappingTemplate: true,
mappingTemplate: indexTemplateMapping,
transformer: (logData: any) => {
const transformed: any = {};
transformed['@timestamp'] = logData.timestamp ? logData.timestamp : new Date().toISOString();
transformed.message = logData.message;
transformed.level = parseWinstonLevel(logData.level);
transformed.fields = _.extend({}, staticMeta, logData.meta);
transformed.indexPrefix = getIndex(logData.indexPrefix);
return transformed;
},
每当记录器写入新条目时,就会调用transformer方法,并且我可以通过设置诸如 message之类的属性来验证其是否有效。它还会将 level覆盖为当前的日志级别。由于某种原因,它对 indexPrefix属性不起作用-即使更改,也不会覆盖初始 indexPrefix。我什至尝试删除初始值,但是随后记录从未成功,因为从未设置 indexPrefix
有人知道为什么吗?它与下面列出的mappingTemplate有关吗:
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index": {
"refresh_interval": "5s"
}
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"@version": { "type": "keyword" },
"message": { "type": "text" },
"severity": { "type": "keyword" },
"fields": {
"dynamic": true,
"properties": {}
}
}
}
}

最佳答案

好吧,如果有人被困住了。我最终改成了loggerFactory。我通过工厂创建了一个以正确的indexPrefix种子的记录器-这样,我最终为每个想要的indexPrefix一个记录器实例...

关于elasticsearch - ElasticsearchTransport使用变换来更改indexPrefix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64591885/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com