Correlating Node.js Logs and Traces
Automatic injection
Enable injection with 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: true
});
This enables automatic trace ID injection for bunyan
, paperplane
, pino
, and winston
.
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
Additional helpful documentation, links, and articles: