@creative-realities/logger
v1.0.3
Published
Logging with log levels and timestamps from moment
Readme
Usage:
The default date format is 'MMM DD YY, hh:mm:ss[:]';
var log = require('moment-log');
log('it is about', ['time']);Outputs: Feb 24 15, 05:02:21: it is about [ 'time' ]
Optionally, you may set the format string for moment.js.
log.format = 'MMM Do YYYY, h:mm:ss a[ -]';
log('it is about', ['time']);Outputs: Feb 24th 2015, 5:04:12 pm - it is about [ 'time' ]
You can also access the moment dependency
var moment = log.moment;
var formatted = moment(1424817118663).format("MMM Do YY");formatted is: Feb 24th 15
log includes an enumeration for log levels
log.NONE = 0;
log.ERROR = 1;
log.WARN = 2;
log.INFO = 3;
log.DEBUG = 4;
log.VERBOSE = 5;The default log level is verbose. If you set the log level to a lower log level, like this:
log.logLevel = log.DEBUG;then the log.verbose() will no longer log.
log.verbose('message');Outputs: nothing.
There are alias for the different log level functions.
log.e = log.error;
log.w = log.warn;
log.i = log.info;
log.d = log.debug;
log.v = log.verbose;The log.dir method is slightly different than the console.dir method, because you may optionally pass in messages before the object and options arguments.
log also provides other console methods, trace, time, timeEnd, and assert.
Instead of providing different levels of the dir, time/timeEnd and assert methods, you may set properties that will be compared to log.logLevel to determine if logging should be performed. The default levels of each are listed below.
log.dirLevel = log.DEBUG;
log.timeLevel = log.INFO;
log.assertLevel = log.DEBUG;Structured (JSON) logging with Datadog trace correlation
By default the logger emits the human-readable text format shown above. For deployments that
ship logs to Datadog, an application opts into structured JSON output at startup by setting the
datadogLogging property (typically gated on environment/config):
var log = require('@creative-realities/logger');
log.datadogLogging = true; // e.g. enable only in staging/productionWhen enabled, each call to log/log.e/log.w/log.i/log.d/log.v emits a single JSON
line instead of the timestamped text line, for example:
{"timestamp":"2026-08-19T14:48:11.123Z","status":"error","message":"PLAYBACK_INGEST_FAILURE category=ingestion-rejected ...","dd":{"trace_id":"...","span_id":"...","service":"cri-analytics","env":"production","version":"1.4.2"}}messageis the same content the text format would render (viautil.format).statusis the log level (error/warn/info/debug/verbose).dd.trace_id/dd.span_idare read from the activedd-tracespan (via the global tracer set by dd-trace, including host single-step instrumentation), so Datadog correlates the log with its trace.dd.service/dd.env/dd.versioncome from thelog.datadogService/log.datadogEnv/log.datadogVersionproperties the application sets (typically from its environment config). When tracing is not active (e.g. local dev), the trace IDs are omitted.
The text format is unchanged when datadogLogging is off (the default), so existing services and
local development are unaffected.
Coverage: log(), log.e/w/i/d/v, log.trace, and log.dir all emit structured JSON when
enabled. For dir, the object is rendered with util.inspect (honoring the showHidden/depth/
color options and dirLevel) and included in message, so cyclic objects are safe. log.time
/ timeEnd / assert delegate to the matching console methods and remain text-only.
