

console.logでネストしたオブジェクトが[Object]で省略される、depth: nullで直る
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
深くネストしたオブジェクトを console.log() すると、途中から [Object] とか ... に丸められて中身が見えなくなることがある。原因と直し方をメモっとく。
何が起きてるか
console.log() は内部で util.inspect() を使ってて、デフォルトの depth オプションが 2。なので3階層より深いプロパティは表示されずに省略される。バグじゃなくて仕様。
直し方
util.inspect を直接使って depth: null を渡せば無制限に展開される。
import util from 'util';
console.log( util.inspect(obj, { depth: null, colors: true, }));console.dir() でも同じオプションが使える。こっちの方が短く書ける。
console.dir(obj, { depth: null, colors: true,});毎回オプション渡すのが面倒なら、アプリ起動時にグローバル設定を変えてしまう手もある。
util.inspect.defaultOptions.depth = null;util.inspect.defaultOptions.colors = true;JSON.stringifyという選択肢
循環参照がなければ JSON.stringify(obj, null, 2) でも展開できる。ただし循環参照があるとそのままエラーになるし、関数やPrototype情報は出力されない。用途が違うので使い分け。
colors: trueの注意
colors: true はターミナルでの色付き表示が前提のオプション。ブラウザのコンソールとか、CloudWatch Logsみたいなログ収集基盤に出す場合は、ANSIエスケープシーケンスがそのまま文字列として混ざって逆に読みにくくなる。出力先がターミナルじゃないなら colors: false(またはオプション自体省略)にしておいた方がいい。
結論
import util from 'util';
console.log(util.inspect(obj, { depth: null, colors: true }));これが一番汎用的。ただしログ収集基盤に流す場合は colors を外すこと。