Debugging Express
Express uses the debug module internally to log information about route matches, middleware in use, application mode, and the flow of the request-response cycle.
debug
is like an augmented version of console.log
. But unlike console.log
, you don’t have to
comment out debug
logs in production code. It is turned off by default and can be conditionally turned on with the use an environment variable named DEBUG
.
To see all the internal logs used in Express, simply set the DEBUG
environment variable to
express:*
when launching your app.
$ DEBUG=express:* node index.js
On Windows, use the corresponding command.
> set DEBUG=express:* & node index.js
Running this on the default app generated by the express generator would print the following.
$ DEBUG=express:* node ./bin/www
express:router:route new / +0ms
express:router:layer new / +1ms
express:router:route get / +1ms
express:router:layer new / +0ms
express:router:route new / +1ms
express:router:layer new / +0ms
express:router:route get / +0ms
express:router:layer new / +0ms
express:application compile etag weak +1ms
express:application compile query parser extended +0ms
express:application compile trust proxy false +0ms
express:application booting in development mode +1ms
express:router use / query +0ms
express:router:layer new / +0ms
express:router use / expressInit +0ms
express:router:layer new / +0ms
express:router use / favicon +1ms
express:router:layer new / +0ms
express:router use / logger +0ms
express:router:layer new / +0ms
express:router use / jsonParser +0ms
express:router:layer new / +1ms
express:router use / urlencodedParser +0ms
express:router:layer new / +0ms
express:router use / cookieParser +0ms
express:router:layer new / +0ms
express:router use / stylus +90ms
express:router:layer new / +0ms
express:router use / serveStatic +0ms
express:router:layer new / +0ms
express:router use / router +0ms
express:router:layer new / +1ms
express:router use /users router +0ms
express:router:layer new /users +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
Now, when a request is made to the app, you will see the logs specified in the Express code.
express:router dispatching GET / +4h
express:router query : / +2ms
express:router expressInit : / +0ms
express:router favicon : / +0ms
express:router logger : / +1ms
express:router jsonParser : / +0ms
express:router urlencodedParser : / +1ms
express:router cookieParser : / +0ms
express:router stylus : / +0ms
express:router serveStatic : / +2ms
express:router router : / +2ms
express:router dispatching GET / +1ms
express:view lookup "index.jade" +338ms
express:view stat "/projects/example/views/index.jade" +0ms
express:view render "/projects/example/views/index.jade" +1ms
To see the logs only from the router implementation set the value of DEBUG
to express:router
. Likewise, to see logs only from the application implementation set the value of DEBUG
to express:application
, and so on.
express
-generated app
The app generated by the express
command also uses the debug
module and its debug namespace is scoped to the name of the application.
If you generated the app with
$ express sample-app
You can enable the debug statements with the following command
$ DEBUG=sample-app node ./bin/www
You can specify more than one debug namespace by assignning a comma separated list of names, as shown below.
$ DEBUG=http,mail,express:* node index.js
For more documentation on debug
, see the debug guide.