2016-11-01 6 views
0

バケットにs3サーバーアクセスログがあり、ラムダ関数で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 

は私が間違っているモジュールを呼び出しています入手しますか?

...このコールバックの問題を修正する方法を把握しようと... cb(null, parsedLogs);:私はS3パーサーのindex.jsにこの行があることに気づいた私は、そのエラーを修正する var s3LogParser= require('s3-log-parser');を行なったし、今私は TypeError: cb is not a function

を取得します

答えて

2

s3-log-parserモジュールがコールバックを期待しているように見えますが、関数が100%同期していても、parse()関数から何も返されません。したがって、解析されたログを取得する唯一の方法は、コールバック関数を提供することです。

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

編集

代わりに(example)S3-アクセスログパーサを使用:

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にログしていないので、正しく解析されていないと思われていますが、コールバックの問題は解決されています。ありがとう! –

関連する問題