代码之家  ›  专栏  ›  技术社区  ›  Stan Wiechers

winston elasticsearch在登录时创建回调错误

  •  0
  • Stan Wiechers  · 技术社区  · 8 年前

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

    错误发生在库中的此处:

      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 回复  |  直到 8 年前
        1
  •  1
  •   Stan Wiechers    8 年前

    需要温斯顿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