当使用“winston-elasticsearch”时,在记录消息时出现此错误:
TypeError: callback is not a function
我的代码:
const winston = require("winston");
const logger = new winston.Logger();
...
if( process.env.ELASTIC_SEARCH_LOGGING_URL ){
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: process.env.ELASTIC_SEARCH_LOGGING_URL,
log: 'info'
});
logger.add(
require('winston-elasticsearch'),
{
client
}
);
}
//this causes the error
logger.info("hi")
我看到了这个:
clock_1 | TypeError: callback is not a function
clock_1 | at Elasticsearch.log (/usr/app/node_modules/winston-elasticsearch/index.js:105:5)
clock_1 | at transportLog (/usr/app/node_modules/winston/lib/winston/logger.js:234:15)
clock_1 | at /usr/app/node_modules/winston/node_modules/async/lib/async.js:157:13
我使用node @ 8.9,winston @ 2.4.1和[email protected]。 ELASTIC_SEARCH_LOGGING_URL env变量是正确的。
该错误发生在库中:
log(info, callback) {
const level = info[LEVEL];
const { message } = info;
let meta = info[SPLAT];
if (meta !== undefined) {
// eslint-disable-next-line prefer-destructuring
meta = meta[0];
}
setImmediate(() => {
this.emit('logged', level);
});
const logData = {
message,
level,
meta,
// timestamp: this.opts.timestamp()
};
const entry = this.opts.transformer(logData);
this.bulkWriter.append(
this.getIndexName(this.opts),
this.opts.messageType,
entry
);
callback();
}
它正在调用未定义的“callback()”。
我配置错误吗?
是否有更好的方法通过Winston将应用程序日志发送到ES?
最佳答案
需要Winston 3.0或更高版本。
const winston = require("winston"); //"winston": "~3",
const logger = winston.createLogger();
if( process.env.ELASTIC_SEARCH_LOGGING_URL ){
var elasticsearch = require('elasticsearch');
var winston_elasticsearch = require('winston-elasticsearch');
var client = new elasticsearch.Client({
host: process.env.ELASTIC_SEARCH_LOGGING_URL,
log: 'info'
});
logger.add( new winston_elasticsearch({
client,
index:"logging"
}));
}
来自winston-elasticsearch开发人员的解决方案:
https://github.com/vanthome/winston-elasticsearch/issues/69#issuecomment-430124467
关于node.js - Winston-Elasticsearch记录时创建回调错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52823107/