我正在使用 winston v3.2.1
、winston-elasticsearch v0.8.8
和 @elastic/elasticsearch v7.6.1
推送日志我的 NodeJS 服务条目到 Elastic Search 集群 v7.6.2。
我的记录器构造如下(参见 https://github.com/vanthome/winston-elasticsearch 和 https://www.npmjs.com/package/@elastic/elasticsearch ):
import { Client } from '@elastic/elasticsearch';
import winston, { Logger } from 'winston';
import { ElasticsearchTransport } from 'winston-elasticsearch';
import { ELASTIC_HOST, ELASTIC_PORT, LOG_LEVEL } from './environment';
...
this.logger = winston.createLogger({
transports: [
new ElasticsearchTransport({
client: new Client({
node: `http://${ELASTIC_HOST}:${ELASTIC_PORT}`
}),
index: 'sector',
level: LOG_LEVEL // Events I log that are 'info' or worse will be transported.
})
]
});
然后我直接使用 logger
引用进行记录:
this.logger.info(`Kill signal received: ${signal}`);
我可以看到我的日志条目被推送到 Elastic Search 集群,但控制台日志中充斥着来自 elasticsearch
和 winston:elasticsearch
记录器的调试输出。我认为它们属于 Elastic Node 客户端和 Elasticsearch Transport 实现。
2020-05-12T22:10:10.114Z elasticsearch Nothing to resurrect
...
2020-05-12T22:10:10.116Z winston:elasticsearch starting bulk writer
...
2020-05-12T22:10:18.122Z winston:elasticsearch nothing to flush
2020-05-12T22:10:20.123Z winston:elasticsearch tick
2020-05-12T22:10:20.123Z winston:elasticsearch nothing to flush
我的服务在 Docker 容器内运行,我不希望 Docker 日志充满调试噪音。我尝试将传输级别设置为 error
,甚至完全删除 Console
传输,但调试噪音仍然存在。我尝试了以下方法来抑制控制台输出,但运气不佳:
winston.level = 'error';
winston.transports.Console.level = 'error';
winston.transports.Console.silent = true;
this.logger.remove(winston.transports.Console);
winston.remove(winston.transports.Console);
我找到了几个关于这个主题的话题,但运气不好:
这几乎就像客户端和传输器在使用单独的日志记录机制。
有什么建议吗?
最佳答案
我已经确认输出根本不是由 winston 生成的。这就是我无法使用上面列出的方法禁用它的原因。
看起来 ElasticsearchTransport
实现使用了一个名为 debug 的包.当在 DEBUG
环境变量中指定模式时,它会打开。我将其设置为 DEBUG=*
以便我可以看到 Express 输出。当我删除环境变量时,调试噪音停止了。
如果您在控制台中看到调试噪音,请检查 debug包不是原因。许多包似乎都在使用它。
关于javascript - 如何禁用 winston elasticstack 客户端和传输生成的调试控制台输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61763394/