LoginSignup
4
4

More than 3 years have passed since last update.

console.logよりutil.debuglogとutil.inspect使ってログ吐きたい

Posted at

console.logよりutil.debuglogとutil.inspect使ってログ吐く:v:

AWS Lambda(node.js12.x)で具合よくログ吐きたいっていうことで、ベストエフォート@自分の脳味噌でログ出力を考えてみました。

[Object]になってしまう問題:relaxed:

深い階層のJSオブジェクトはconsole.logだと[Object]と表示されてしまう。なんとか出力したい。

const obj = {a:{b:{c:{d:{e:{f:function(){return 1;}}}}}}}
console.log(obj) // { a: { b: { c: [Object] } } }

JSON.stringify?:point_left:

JSON.stringify使ってconsole.logに吐いてみる。

const obj = {a:{b:{c:{d:{e:{f:function(){return 1;}}}}}}}
console.log(JSON.stringify(obj)) // {"a":{"b":{"c":{"d":{"e":{}}}}}}

見事に関数部分のkey-valueが消えてしまってる。これはさすがにどうにかしたい。

util.debuglogとutil.inspectを併用してログ吐く

結論としてはutil使ってしまう。

環境変数NODE_DEBUGにINFOとかWARNとかセクション設定してあげたらロガー返してくれます。
Windows環境ですがこんな感じで設定しておきます。カンマ区切りでセクションは複数指定OK。

SET NODE_DEBUG=INFO,WARN

詳細なオプションとかはドキュメント見たらGoodです。
とりあえずdepth:nullってしたらオブジェクト全部吐いてくれます。

const info = require('util').debuglog('INFO')
const warn = require('util').debuglog('WARN')
const trace = require('util').debuglog('TRACE') // 環境変数設定なし

const obj = {a:{b:{c:{d:{e:{f:function(){return 1;}}}}}}}

info(util.inspect(obj, {depth: null}))
warn(util.inspect(obj, {depth: null}))
trace(util.inspect(obj, {depth: null})) // 環境変数設定ないのでログも吐かないがエラーも吐かない適当さがJSの素晴らしいところ

メリ

分岐が一つ減るはず。

デメ

自分の脳味噌では思いつかない。

Node.js Reference

util.debuglog
util.inspect

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4