この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。
某カフェのバックエンドは全てLambda/Node.jsで実装されています。 昨日、Node.js10.xがリリースされていたので、ランタイムを変更してみました。 この時、CloudWatch Logs(以下、CWL)に出力されるログの形式が変わってたのでシェアします。 なお、これは2019年5月15日時点の挙動であり、変更される可能性あります(てか、変更して欲しい)。
サヨナラJSON.stringify
Node.js10.xで console.log
が機能強化され、自動的にフォーマットされるようになりました。
これまでは、オブジェクトの出力時、都度 JSON.stringify
を使うのが鉄板でしたが、サヨナラです!
Lambdaのサンプルイベントで以下のようなAPI Gatewayからのイベントを出力してみます。
{
"body": "eyJ0ZXN0IjoiYm9keSJ9",
"resource": "/{proxy+}",
"path": "/path/to/resource",
"httpMethod": "POST",
"isBase64Encoded": true,
"queryStringParameters": {
"foo": "bar"
},
"pathParameters": {
"proxy": "/path/to/resource"
},
"stageVariables": {
"baz": "qux"
},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "max-age=0",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "1234567890.execute-api.ap-northeast-1.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Custom User Agent String",
"Via": "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==",
"X-Forwarded-For": "127.0.0.1, 127.0.0.2",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
}
}
Node.js8.10の場合
console.log(event);
つらたん・・・
console.log(JSON.stringify(event, null, 2));
カラーもついて読みやすいです。 なのでこれがスタンダードでした。
Node.js10.xの場合
JSON.stringifyを使わなくても!
console.log(event);
整形されています。 でも、CWLで見ると・・・
残念すぎる(T_T
恐らくは改行の扱いが、Amazon Linux2で変わったのかと思いますが・・・。
JSON.stringify
を使った場合も出力フォーマットは変わりませんでした。
console.tableを試す
ついでに、Node.js10から使える関数で console.table
があるので試してみます。
console.table({
x: 10,
y: 40
});
これもちょっと微妙ですね・・・ コンソール上では見やすいですが、CWLにはマッチしない模様。
まとめ
Node.js10.xにするなら、JSON.stringify
は書かなくてOK。
CWLの改善待ち!