0

Si je console.log('message') dans mon code, il apparaît dans CloudWatch comme
2017-03-16T18:58:21.823Z 863c835c-0a7a-11e7-9140-e5018d6e5029 message.Changer le format de journal des journaux CloudWatch de Lambda (Node.js)

Est-il possible de supprimer la mise en forme automatique afin que Cloudwatch affiche simplement l'argument que je passe à console.log?

+1

Qu'est-ce que « la mise en forme automatique vous faites référence à chaque message de journal Lambda est préfixé avec un horodatage et l'ID d'invocation Lambda Sans cette information?. les logs seraient un désordre total –

+0

qui est la mise en forme automatique, l'identifiant de requête pourrait facilement être réduit à moins de caractères, des séparateurs pourraient être ajoutés entre l'heure, l'identifiant de la requête et le message pour faciliter l'analyse. comment résoudre ce problème? – maniciam

Répondre

2

l'intérieur de votre gestionnaire vous pouvez écraser console.log écrire directement à 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

super, c'est ce que je cherchais, il semble que cela se passe de façon asynchrone, mais j'ai du mal à trouver une soluti sur. Connaissez-vous un moyen de rendre cela synchrone? – maniciam

+0

@maniciam malheureusement pas. Une solution non parfaite serait de remplacer la fonction de rappel 'done' de votre gestionnaire par quelque chose comme' const finish = (erreur, données) => process.stdout.write ('done',() => done (erreur, données)) ', puis appelez' finish() 'au lieu d'appeler' done() 'directement. – idbehold