Node.js Debugging

By  on  

Proper logging is of massive utility for web apps, both during development and after deployment.  What can sometimes be difficult is organizing both the code and output of logging, i.e. knowing where each log message is coming from.  I recently found debug, a Node.js utility for organized and optimized debugging.

Creating an instance of debug is simple and you can create multiple loggers per file:

// Create multiple instances of debug
// In theory these would serve two different purposes
var debuggerA = require('debug')('worker:a'),
    debuggerB = require('debug')('worker:b');

// Sample usages of the debugger
function work() {
  debuggerA('doing lots of uninteresting work');
  setTimeout(work, Math.random() * 1000);
}

work();

function workb() {
  debuggerB('doing some work');
  setTimeout(workb, Math.random() * 2000);
}

workb();

Node.js Debug

The namespace given to a debug instance as you must use an environment variable to signal which loggers should go to STDOUT when the script is run:

// Show all debugger messages prefixed "worker:_____"
DEBUG=worker:* node app.js

The environment variable strategy for signaling which instances should output is brilliant as you may want only certain types of messages logged in production vs. development.  Use namespaces wisely!

I was also able to use chalk to color messages as desired:

var chalk = require('chalk');

debuggerA(chalk.red.bold('OMG an awful error!'));

debug is one of those utilities that has a very simple purpose and accomplishes the task well.  Don't skimp when it comes to logging informative messages -- they'll help you during development and could be critical when auditing the app after a security incident!

Recent Features

  • By
    Designing for Simplicity

    Before we get started, it's worth me spending a brief moment introducing myself to you. My name is Mark (or @integralist if Twitter happens to be your communication tool of choice) and I currently work for BBC News in London England as a principal engineer/tech...

  • By
    9 Mind-Blowing WebGL Demos

    As much as developers now loathe Flash, we're still playing a bit of catch up to natively duplicate the animation capabilities that Adobe's old technology provided us.  Of course we have canvas, an awesome technology, one which I highlighted 9 mind-blowing demos.  Another technology available...

Incredible Demos

  • By
    Highlighter: A MooTools Search & Highlight Plugin

    Searching within the page is a major browser functionality, but what if we could code a search box in JavaScript that would do the same thing? I set out to do that using MooTools and ended up with a pretty decent solution. The MooTools JavaScript Class The...

  • By
    Create Keyboard Shortcuts with Mousetrap

    Some of the finest parts of web apps are hidden in the little things.  These "small details" can often add up to big, big gains.  One of those small gains can be found in keyboard shortcuts.  Awesome web apps like Gmail and GitHub use loads of...

Discussion

  1. Allain

    Thanks for making this known. I’m pretty sure debug logs to STDERR so that piping still works.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!