Connecting NodeJS Logs and Traces

Connecting NodeJS Logs and Traces

Automatically Inject Trace and Span IDs

Enable injection with the environment variable DD_LOGS_INJECTION=true or by configuring the tracer directly:

const tracer = require('dd-trace').init({
    logInjection: true

This enables automatic trace ID injection for bunyan, paperplane, pino, and winston.

If you haven’t done so already, configure the NodeJS tracer with DD_ENV, DD_SERVICE, and DD_VERSION. This will provide the best experience for adding env, service, and version (see Unified Service Tagging for more details).

Note: Automatic injection only works for logs formatted as JSON.

Manually Inject Trace and Span IDs

If you are using a logging library not supported for automatic injection but are using JSON format, it’s possible to do manual injection directly in your code.

Example using console as the underlying logger:

const tracer = require('dd-trace');
const formats = require('dd-trace/ext/formats');

class Logger {
    log(level, message) {
        const span = tracer.scope().active();
        const time = new Date().toISOString();
        const record = { time, level, message };

        if (span) {
            tracer.inject(span.context(), formats.LOG, record);


module.exports = Logger;

Further Reading