templates/todo/api/js/src/config/applicationInsightsTransport.ts (40 lines of code) (raw):

import { TelemetryClient } from "applicationinsights"; import { SeverityLevel, TraceTelemetry } from "applicationinsights/out/Declarations/Contracts"; import Transport, { TransportStreamOptions } from "winston-transport"; import { LogEntry } from "winston"; import { LogLevel } from "./observability"; export interface ApplicationInsightsTransportOptions extends TransportStreamOptions { client: TelemetryClient handleRejections?: boolean; } export class ApplicationInsightsTransport extends Transport { private client: TelemetryClient; constructor(opts: ApplicationInsightsTransportOptions) { super(opts); this.client = opts.client; } public log(info: LogEntry, callback: () => void) { const telemetry: TraceTelemetry = { severity: convertToSeverity(info.level), message: info.message, }; this.client.trackTrace(telemetry); callback(); } } const convertToSeverity = (level: LogLevel | string): SeverityLevel => { switch (level) { case LogLevel.Debug: return SeverityLevel.Verbose; case LogLevel.Verbose: return SeverityLevel.Verbose; case LogLevel.Error: return SeverityLevel.Error; case LogLevel.Warning: return SeverityLevel.Warning; case LogLevel.Information: return SeverityLevel.Information; default: return SeverityLevel.Verbose; } };