2016-11-01 8 views
0

我在存儲桶中有s3服務器訪問日誌,我試圖使用lambda函數將它們提供給AWS上的ElasticSearch服務。當嘗試使用不同的分析器時,cb不是函數

​​我正在使用,它使用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); ...試圖找出如何解決這個問題的回調...

回答

2

看起來好像s3-log-parser模塊需要回調並且不會從其parse()函數返回任何東西,即使該函數是100%同步的。所以獲得解析日誌的唯一方法是提供回調函數。

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

編輯

使用S3的訪問日誌分析器代替(example):

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

是的,對不起,我已經改變了這一切。忘了編輯。 –

+0

@tyrell_c查看我的編輯 – idbehold

+0

仍然沒有記錄到ES,所以我假設它沒有正確解析,但回調問題已解決。謝謝! –

相關問題