Node.js 10.x へのアップデート JSON.stringify 編
渡辺です。
某カフェのバックエンドは全て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の改善待ち!