我在存储桶中有s3服务器访问日志,我正在尝试使用lambda函数将它们发送到AWS上的ElasticSearch服务。
我正在使用的 The example lambda function,它使用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
我注意到在s3解析器的index.js中有这一行:cb(null, parsedLogs);
...试图弄清楚如何解决这个回调问题......
答案 0 :(得分:2)
好像s3-log-parser
模块需要回调并且不会从其parse()
函数返回任何内容,即使该函数是100%同步的。因此,获取解析日志的唯一方法是提供回调函数。
var logRecord = s3LogParser.parse(line.toString(), function (err, lines) {
logRecord = lines
})
console.log(logRecord)
修改强>
改为使用s3-access-log-parser(example):
var s3alp = require("s3-access-log-parser")
var bogusCharacters = new RegExp(String.fromCharCode(8204, 8203), 'g')
var logRecord = s3alp(line.toString().replace(bogusCharacters, ''))