protected log()

in src/logger/telemetry-transport.ts [46:78]


    protected log(level: string, message: string, metadata?: any, callback?: (arg1, arg2) => void) {
        if (this.reporter && metadata && metadata.telemetry) {
            try {
                delete metadata.telemetry;
                const properties: { [key: string]: string; } = { level };
                const measures: { [key: string]: number; } = {};
                for (const key of Object.keys(metadata)) {
                    if (typeof key === "string") {
                        const value = metadata[key];
                        if (value === null || typeof value === "string" || value instanceof String) {
                            properties[key] = value;
                        } else if (isNumeric(value)) {
                            measures[key] = value;
                        } else {
                            winston.debug(`Ignore log(${key} = ${value}) since the value type are not supported.`);
                        }
                    }
                }
                if (level === LogLevel.Info) {
                    this.reporter.sendTelemetryEvent(message, properties, measures);
                } else {
                    this.reporter.sendTelemetryErrorEvent(message, properties, measures, ["message", "notification", "errorLine"]);
                }
            } catch (telemetryErr) {
                // If sending telemetry event fails ignore it so it won"t break the extension
                winston.error("Failed to send telemetry event. error: " + telemetryErr);
            }
        }
        super.emit("logged");
        if (callback) {
            callback(null, true);
        }
    }