当使用“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/

10-11 08:40