in packages/opentelemetry-node/lib/luggite.js [285:345]
function mkRecord(log, minLevel, args) {
var excludeFields, fields, msgArgs;
if (args[0] instanceof Error) {
// `log.<level>(err, ...)`
fields = {
// Use this Logger's err serializer, if defined.
err:
log._serializers && log._serializers.err
? log._serializers.err(args[0])
: errSerializer(args[0]),
};
excludeFields = {err: true};
if (args.length === 1) {
msgArgs = [fields.err.message];
} else {
msgArgs = args.slice(1);
}
} else if (typeof args[0] !== 'object' || Array.isArray(args[0])) {
// `log.<level>(msg, ...)`
fields = null;
msgArgs = args.slice();
} else if (Buffer.isBuffer(args[0])) {
// `log.<level>(buf, ...)`
// Almost certainly an error, show `inspect(buf)`. See bunyan
// issue #35.
fields = null;
msgArgs = args.slice();
msgArgs[0] = inspect(msgArgs[0]);
} else {
// `log.<level>(fields, msg, ...)`
fields = args[0];
if (
fields &&
args.length === 1 &&
fields.err &&
fields.err instanceof Error
) {
msgArgs = [fields.err.message];
} else {
msgArgs = args.slice(1);
}
}
// Build up the record object.
var rec = Object.assign({}, log._fields);
rec.level = minLevel;
if (fields) {
// TODO(perf): Possible to avoid this Object.assign by tweaking serializer API?
var recFields = Object.assign({}, fields);
if (log._serializers) {
log._applySerializers(recFields, excludeFields);
}
Object.assign(rec, recFields);
}
rec.msg = format.apply(log, msgArgs);
if (!rec.time) {
rec.time = new Date();
}
return rec;
}