2017-03-20 30 views
1
const winston = require('winston'); 
var S3StreamLogger = require('s3-streamlogger').S3StreamLogger; 

var s3_stream = new S3StreamLogger({ 
    bucket: "bucket_name", 
    access_key_id: "access_key_id", 
    secret_access_key: "secret_access_key" 
}); 

var logger = new (winston.Logger)({ 
    transports: [ 
     new (winston.transports.File)({ 
      stream: s3_stream 
     }) 
    ] 
}); 

exports.handler = function (event, context) { 
    winston.info('Hello Winston!'); 
    console.log("This is logging demo"); 
    logger.info('Logging is in progress'); 
    console.log("Consol Starting Lambda function"); 

    var responseCode = 200; 
    var responseBody = { 
     message: "Hello !", 
     input: event 
    }; 
    var response = { 
     statusCode: responseCode, 
     headers: { 
      "x-custom-header": "my custom header value" 
     }, 
     body: JSON.stringify(responseBody) 
    }; 
    console.log("response: " + JSON.stringify(response)); 
    context.succeed(response); 
}; 

aws lambdaで上記のコードを実行すると成功しました。私は雲のログを取得していますが、S3バケットの内部に何も生成されていません。
私は、そこに作成されるログファイルが何も作成されないことを望んでいました。
コードに何か不足していますか?
私の目的は、分析のためにファイルをダウンロードできるように、amazon S3バケットにログファイルを生成することです。'winston'と 's3-streamlogger'を使用してaws S3バケットにログを作成できません。

答えて

0

s3-streamloggerは、コンテンツをs3にアップロードする前にバッファリングします。デフォルトでは、20秒間、または10kBのコンテンツをバッファします(どちらか小さい方)。ラムダ関数が少なくとも20秒間実行されない場合、または10KBのログを書き込む場合、関数が中断される前に何も書き込まれません。

あなたはupload_everybuffer_sizeオプションを経由してバッファリング(https://github.com/coggle/s3-streamlogger#upload_everyを参照)のためのより小さなしきい値を指定、または手動でストリーム上flushFileを呼び出すことによって、各要求後のファイルをフラッシュすることができどちらか。

関連する問題