function mkRecord()

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