2017-03-16 103 views
0

如果我在我的代碼中使用console.log('message'),它會在Cloudwatch中顯示爲
2017-03-16T18:58:21.823Z 863c835c-0a7a-11e7-9140-e5018d6e5029 message從Lambda(Node.js)更改Cloudwatch日誌的日誌格式

是否有任何方法可以刪除自動格式設置,以便Cloudwatch只顯示我傳遞給console.log的參數?

+1

什麼「自動格式化你指的是每個LAMBDA日誌消息被換成了一個時間戳和拉姆達調用ID沒有這些信息?日誌會是一團糟 –

+0

這是自動格式化,請求ID很容易被減少到更少的字符,可以在時間,請求ID和消息之間添加分隔符,以便更容易解析...你知道嗎如何修復它? – maniciam

回答

2

內部處理程序可以覆蓋console.log直接寫入到stdout

var util = require('util') 

module.exports.handler = function (event, context, done) { 
    console.log = function() { 
    var args = Array.prototype.slice.call(arguments) 
    process.stdout.write(args.map(function (arg) { 
     return util.isPrimitive(arg) ? String(arg) : util.inspect(arg) 
    }).join(' ')) 
    } 

    // the rest of your handler... 
} 
+0

太棒了,這就是我一直在尋找的東西,它看起來像是在異步地發生,但是很難找到一個「齊平」的解決方案上。你知道一種使這個同步的方法嗎? – maniciam

+0

@maniciam不幸的沒有。一個非完美的解決方案就是用'const finish =(err,data)=> process.stdout.write('done',()=> done(err,data)等東西替換你的處理器的'done'回調函數。 )'然後調用'finish()'而不是直接調用'done()'。 – idbehold