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