当尝试使用不同的解析器时,Cb不是一个函数

cb is not a function when trying to use a different parser

本文关键字:Cb 一个 函数      更新时间:2023-09-26

我在一个桶中有s3服务器访问日志,我试图用lambda函数让它们到AWS上的ElasticSearch服务。

我正在使用的示例lambda函数,它使用clf-parser粘贴apache通用日志文件。由于我想使用s3-log-parser,我做了以下更改:

// instead of 
var parse = require('clf-parser');
// I have
var s3logparser = require('s3-log-parser');
// instead of
var logRecord = parse(line.toString());
// I have
var logRecord = s3LogParser.parse(line.toString());`

得到

ReferenceError: s3LogParser is not defined 

我调用模块错误吗?我用var s3LogParser= require('s3-log-parser');来修正这个错误现在我得到TypeError: cb is not a function

我注意到,在index.js s3解析器有这一行:cb(null, parsedLogs);…试图找出如何解决这个回调问题…

看起来好像s3-log-parser模块期望回调,并且没有从parse()函数返回任何东西,即使该函数是100%同步的。因此,获得已解析日志的唯一方法是提供一个回调函数。

var logRecord = s3LogParser.parse(line.toString(), function (err, lines) {
  logRecord = lines
})
console.log(logRecord)

编辑

使用s3-access-log-parser代替(示例):

var s3alp = require("s3-access-log-parser")
var bogusCharacters = new RegExp(String.fromCharCode(8204, 8203), 'g')
var logRecord = s3alp(line.toString().replace(bogusCharacters, ''))