Debugging

3 minute read

Application logging

The first step to debugging your application is to enable an appropriate level of logging. API Builder logs to the terminal console window, and the logging can be controlled by editing conf/default.js (search for “logLevel”), or by setting an environment variable LOG_LEVEL. If you encounter a problem with API Builder, you should inspect the terminal console window. If necessary, decrease the logging level to “trace” to gather more information.

The following levels are listed below from most-verbose to least-verbose. In API Builder, messages are logged at specific levels according to a fixed log level. When you set logging to a specific level, messages at that level and higher will be logged.

Log level
trace Detailed verbose logging.
debug Assists with debugging, especially Flows.
info Mostly, request/response logging.
warn Warning messages.
error Error messages.
fatal Fatal messages.
none Disable logging.

While in development, you may want to log at “debug” level to assist in debugging flows. However, in production, you will want much less logging, e.g. info or higher. To set your logging, edit conf/default.js and change the logLevel .

// conf/default.js

// Log level of the application. Can be set to (in order of most-verbose to
// least): trace, debug, info, warn, error, fatal, none
logLevel: process.env.LOG_LEVEL || 'info',

LOG_LEVEL environment variable

You can set the API Builder log level via the LOG_LEVEL environment variable from the console, without having to edit conf/default.js.

On bash

LOG_LEVEL=trace npm start

On Windows

SET LOG_LEVEL=trace
npm start

On Docker

If you are deploying API Builder using Docker.

docker run -e LOG_LEVEL=trace

Additional logging

If changing the logging level (see above) does not yield enough information, sometimes there are ways to enable additional module-specific logging. Some modules use an independent logging mechanism and different environment variables. Examples are given using the bash style.

DEBUG environment variable

Many modules use the Node.js debug package (see for more information), which can be controlled using the DEBUG environment variable. For example, Express.js.

DEBUG=express:router npm start

Module @axway/api-builder-plugin-dc-mssql

The Microsoft SQL Server plugin uses knex.

DEBUG=knex:* npm start

Module @axway/api-builder-plugin-dc-mysql

The MySQL plugin uses mysql.

DEBUG=knex:* npm start

Module @axway/api-builder-plugin-dc-oracle

The Oracle plugin uses oracledb and it has their own debugging.

DPI_DEBUG_LEVEL=64 npm start

Using a debugger

Sometimes, debugging can yield valuable information. In particular, if you are developing custom API or writing your own flow-nodes using the API Builder SDK, it is an invaluable tool. You can use a variety of debugging / coding environments. However, the Chrome Debugger is most straight forward as you probably already have it installed. To launch Node.js in debug mode, use the –inspect-brk flag.

node --inspect-brk .

This will launch a Node.js process and listen for a debugging client. In Chrome, navigate to chrome://inspect/#devices.

Screen_Shot_2020-07-06_at_1.58.56_PM

Breakpoints

There are a variety of ways to set breakpoints. You can set them manually in the debugger, or by inserting the “debugger” statement into your code before running the application, e.g.

image2020-7-15_10_20_55

Last modified September 9, 2022: V5 - Austen release (#102) (2414d7c)