Connecting NodeJS Logs and Traces
Datadog's Research Report: The State of Serverless Report: The State of Serverless

Connecting NodeJS Logs and Traces

Automatic Trace ID injection

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.

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

Manual Trace ID 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