Automatic injection

Enables automatic trace ID injection for bunyan, paperplane, pino, and winston when structured application loggers are used.

For older tracer versions injection can be enabled the environment variable DD_LOGS_INJECTION=true or by configuring the tracer directly:

// This line must come before importing the logger.
const tracer = require('dd-trace').init({
    logInjection: false
});

If you haven’t done so already, configure the Node.js 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.

Manual injection

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);
        }

        console.log(JSON.stringify(record));
    }
}

module.exports = Logger;

Further Reading