Skip to content
FLAVIO COPES
flaviocopes.com
2026

How to log an object in Node

By Flavio Copes

Learn how to log a full object in Node.js, getting past the [Object] placeholder after two levels of nesting using JSON.stringify or util.inspect.

~~~

When you type console.log() into a JavaScript program that runs in the browser, that is going to create a nice entry in the Browser Console:

Browser console showing console.log(obj) with a collapsed object display containing name and age properties

Once you click the arrow, the log is expanded, and you can clearly see the object properties:

Browser console with expanded object showing individual name and age properties plus proto object

In Node, the same happens.

We don’t have such luxury when we log something to the console, because that’s going to output the object to the shell if you run the Node program manually, or to the log file. You get a string representation of the object.

Now, all is fine until a certain level of nesting. After two levels of nesting, Node gives up and prints [Object] as a placeholder:

const obj = {
  name: 'Flavio',
  age: 35,
  person1: {
    name: 'Tony',
    age: 50,
    person2: {
      name: 'Albert',
      age: 21,
      person3: {
        name: 'Peter',
        age: 23
      }
    }
  }
}
console.log(obj)


{
  name: 'Flavio',
  age: 35,
  person1: {
    name: 'Tony',
    age: 50,
    person2: {
      name: 'Albert',
      age: 21,
      person3: [Object]
    }
  }
}

How can you print the whole object?

The best way to do so, while preserving the pretty print, is to use

console.log(JSON.stringify(obj, null, 2))

where 2 is the number of spaces to use for indentation.

Another option is to use

require('util').inspect.defaultOptions.depth = null
console.log(obj)

but the problem is that the nested objects after level 2 are now flattened, and this might be a problem with complex objects.

Tagged: Node.js · All topics
~~~

Related posts about node: