winston-elasticsearch记录时会创建回调错误

时间:2018-10-15 18:55:16

标签: node.js elasticsearch winston

使用“ 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和winston-elasticsearch@0.7.0。 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?

1 个答案:

答案 0 :(得分:1)

需要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