7 console.log() alternatives

Siddharth - Oct 31 '21 - - Dev Community

Sometimes while debugging you may use console.log or maybe console.warn too. But there are a lot more methods which can help you debug your code even better. Let's take a look at some of them:

console.table()

The handiest method on this list. Can be used to log any object or array in table form.

console.table([
  {
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false
  },
  {
    "userId": 1,
    "id": 2,
    "title": "quis ut nam facilis et officia qui",
    "completed": false
  },
  {
    "userId": 1,
    "id": 3,
    "title": "fugiat veniam minus",
    "completed": false
  },
  {
    "userId": 1,
    "id": 4,
    "title": "et porro tempora",
    "completed": true
  },
  {
    "userId": 1,
    "id": 5,
    "title": "laboriosam mollitia et enim quasi adipisci quia provident illum",
    "completed": false
  },
  {
    "userId": 1,
    "id": 6,
    "title": "qui ullam ratione quibusdam voluptatem quia omnis",
    "completed": false
  },
]);

Enter fullscreen mode Exit fullscreen mode

This will give us a neat little table:

console.table()

Cool?

console.assert()

console.assert() is used to assert that something is truthy. If not, it will log a message to the console.

const isEven = n => n % 2 === 0;

for (let i = 0; i < 3; i++) {
    console.assert(isEven(i), '%s is not even!', i);
}
Enter fullscreen mode Exit fullscreen mode

This will log Assertion failed: 1 is not even! because well, one is not even! (Who told you that one is even?? Go to school and learn a thing or two)

console.count()

console.count() is used to check how many times this line has been called.

for (let i = 0; i < 3; i++) {
    console.count();
}
Enter fullscreen mode Exit fullscreen mode

This will log:

default: 1
default: 2
default: 3
Enter fullscreen mode Exit fullscreen mode

You can also label the count:

for (let i = 0; i < 3; i++) {
    console.count('outer loop');
    for (let i = 0; i < 3; i++) {
        console.count('inner loop');
    }
}
Enter fullscreen mode Exit fullscreen mode

This will log:

outer loop: 1
inner loop: 1
inner loop: 2
inner loop: 3
outer loop: 2
inner loop: 4
inner loop: 5
inner loop: 6
outer loop: 3
inner loop: 7
inner loop: 8
inner loop: 9
Enter fullscreen mode Exit fullscreen mode

console.group() and console.groupEnd()

console.group() and console.groupEnd() are used for grouping similar (or different ;) logs together.

console.group('group 1');
for (let i = 0; i < 3; i++) {
    console.log(i);
}
console.groupEnd('group 1');

console.group('group 2');
for (let i = 0; i < 3; i++) {
    console.log(i);
}
console.groupEnd('group 2');
Enter fullscreen mode Exit fullscreen mode

That should log two openable/closeable groups which can be handy when dealing with a lot of logs.

Inside the groups you can use any other console methods, even nested console.group()

You can also use console.groupCollapsed() to make the groups closed by default.

console.time() and friends

You can use console.time() and it's friends console.timeStart(), console.timeEnd(), and console.timeLog() to measure stuff.

console.time();

for (let i = 0; i < 1e9; i++) {
  // Intense stuff
}

console.timeEnd()
Enter fullscreen mode Exit fullscreen mode

This will log something like:

default: 9531ms - timer ended
Enter fullscreen mode Exit fullscreen mode

9531ms is the time between console.time() and console.timeEnd().

You can also label these timers so you can have multiple independent timers running at the same time:

console.time('first');

for (let i = 0; i < 1e9; i++) {
  // Intense stuff
}

console.timeLog('first'); // Logging how much time has passed

console.time('second');

for (let i = 0; i < 1e9; i++) {
  // Intense stuff
}

console.timeEnd('first');
console.timeEnd('second');
Enter fullscreen mode Exit fullscreen mode

This will log:

first: 8497ms
first: 17815ms - timer ended
second: 9318ms - timer ended
Enter fullscreen mode Exit fullscreen mode

console.trace()

When you are working with a lot of nested function calls or recursion at some point you will need to know which function called who. console.trace() is a handy way to do that:

const shallow = () => deep();
const deep = () => deeper();
const deeper = () => deepest();
const deepest = () => console.trace()

shallow()
Enter fullscreen mode Exit fullscreen mode

This will log this stacktrace:

console.trace()
    deepest debugger eval code:4
    deeper debugger eval code:3
    deep debugger eval code:2
    shallow debugger eval code:1
    <anonymous> debugger eval code:1
Enter fullscreen mode Exit fullscreen mode

Now we can easily see that shallow called deep, which called deeper which called deepest


That's the end of the list!

If you found this post helpful, spread the word! or follow me on twitter or over here to stay updated on my blog posts!

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .