@shellicar/winston-azure-application-insights 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,43 @@
1
+ import * as winston from 'winston';
2
+ import { Format } from 'logform';
3
+ import TransportStream from 'winston-transport';
4
+ import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
5
+ import { TelemetryClient as TelemetryClient$1 } from 'applicationinsightsv2';
6
+ import { TraceTelemetry, TelemetryClient, ExceptionTelemetry } from 'applicationinsightsv3';
7
+
8
+ type PlainObject = Record<string, any>;
9
+ type AzureInsightsClientOptions = {
10
+ version: 2;
11
+ client: TelemetryClient$1;
12
+ filters?: ITelemetryFilterV2[];
13
+ } | {
14
+ version: 3;
15
+ client: TelemetryClient;
16
+ filters?: ITelemetryFilterV3[];
17
+ };
18
+ declare abstract class ITelemetryFilterV3 {
19
+ filterTrace(trace: TraceTelemetry, client: TelemetryClient): boolean;
20
+ filterException(trace: ExceptionTelemetry, client: TelemetryClient): boolean;
21
+ }
22
+ declare abstract class ITelemetryFilterV2 {
23
+ filterTrace(trace: TraceTelemetry$1, client: TelemetryClient$1): boolean;
24
+ filterException(trace: ExceptionTelemetry, client: TelemetryClient$1): boolean;
25
+ }
26
+ type AzureApplicationInsightsLoggerOptions = AzureInsightsClientOptions & {
27
+ level?: string;
28
+ silent?: boolean;
29
+ sendErrorsAsExceptions?: boolean;
30
+ };
31
+ declare class AzureApplicationInsightsLogger extends TransportStream {
32
+ private readonly options;
33
+ sendErrorsAsExceptions: boolean;
34
+ readonly name: string;
35
+ constructor(options: AzureApplicationInsightsLoggerOptions);
36
+ private handleTrace;
37
+ private handleException;
38
+ log(info: PlainObject, callback: () => void): void;
39
+ }
40
+
41
+ declare const createWinstonLogger: (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => winston.Logger;
42
+
43
+ export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger };
package/dist/index.d.ts CHANGED
@@ -1,15 +1,35 @@
1
- import { TelemetryClient } from 'applicationinsights';
1
+ import * as winston from 'winston';
2
+ import { Format } from 'logform';
2
3
  import TransportStream from 'winston-transport';
4
+ import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
5
+ import { TelemetryClient as TelemetryClient$1 } from 'applicationinsightsv2';
6
+ import { TraceTelemetry, TelemetryClient, ExceptionTelemetry } from 'applicationinsightsv3';
3
7
 
4
8
  type PlainObject = Record<string, any>;
5
- interface AzureApplicationInsightsLoggerOptions {
9
+ type AzureInsightsClientOptions = {
10
+ version: 2;
11
+ client: TelemetryClient$1;
12
+ filters?: ITelemetryFilterV2[];
13
+ } | {
14
+ version: 3;
6
15
  client: TelemetryClient;
16
+ filters?: ITelemetryFilterV3[];
17
+ };
18
+ declare abstract class ITelemetryFilterV3 {
19
+ filterTrace(trace: TraceTelemetry, client: TelemetryClient): boolean;
20
+ filterException(trace: ExceptionTelemetry, client: TelemetryClient): boolean;
21
+ }
22
+ declare abstract class ITelemetryFilterV2 {
23
+ filterTrace(trace: TraceTelemetry$1, client: TelemetryClient$1): boolean;
24
+ filterException(trace: ExceptionTelemetry, client: TelemetryClient$1): boolean;
25
+ }
26
+ type AzureApplicationInsightsLoggerOptions = AzureInsightsClientOptions & {
7
27
  level?: string;
8
28
  silent?: boolean;
9
29
  sendErrorsAsExceptions?: boolean;
10
- }
30
+ };
11
31
  declare class AzureApplicationInsightsLogger extends TransportStream {
12
- readonly client: TelemetryClient;
32
+ private readonly options;
13
33
  sendErrorsAsExceptions: boolean;
14
34
  readonly name: string;
15
35
  constructor(options: AzureApplicationInsightsLoggerOptions);
@@ -18,4 +38,6 @@ declare class AzureApplicationInsightsLogger extends TransportStream {
18
38
  log(info: PlainObject, callback: () => void): void;
19
39
  }
20
40
 
21
- export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions };
41
+ declare const createWinstonLogger: (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => winston.Logger;
42
+
43
+ export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var e=require("winston");function t(e){return e&&e.__esModule?e:{default:e}}var r=t(require("winston-transport")),s=Object.defineProperty,o=(e,t)=>s(e,"name",{value:t,configurable:!0}),i={0:"Verbose",1:"Information",2:"Warning",3:"Error",4:"Critical"},n={0:0,1:1,2:2,3:3,4:4},c=o((e=>({emerg:4,alert:4,crit:4,error:3,warning:2,warn:2,notice:1,info:1,verbose:0,debug:0,silly:0}[e]??1)),"getMessageLevel"),l=o((e=>e instanceof Error),"isErrorLike"),a=o((e=>null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype),"isPlainObject"),p=o((e=>"object"!=typeof e||a(e)?e:Object.assign({},e)),"convertToPlainObject"),f=o((e=>{const t=["level","message"];return Object.keys(e).filter((e=>!t.includes(e))).reduce(((t,r)=>{const s=e[r];return t[r]=p(s),t}),{})}),"extractPropsFromInfo"),g=o((e=>{const t={message:e.message};for(const[r,s]of Object.entries(e))"stack"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=p(s));return t}),"extractErrorPropsForTrace"),h=class{static{o(this,"ITelemetryFilterV3")}filterTrace(e,t){return!0}filterException(e,t){return!0}},u=class{static{o(this,"ITelemetryFilterV2")}filterTrace(e,t){return!0}filterException(e,t){return!0}},m=class extends r.default{constructor(e){super({level:e.level??"info",silent:e.silent??!1}),this.options=e,this.name="applicationinsightslogger",this.sendErrorsAsExceptions=e.sendErrorsAsExceptions??!0}static{o(this,"AzureApplicationInsightsLogger")}sendErrorsAsExceptions;name;handleTrace(e,t,r,s){const o=f(t);let c;if(l(t)?c=t:l(r)?c=r:l(s)&&(c=s),c&&Object.assign(o,g(c)),s!==c&&Object.assign(o,s),3===this.options.version){const t={message:String(r),severity:i[e],properties:o};for(const e of this.options.filters??[])if(!e.filterTrace(t,this.options.client))return;this.options.client.trackTrace(t)}else{const t={message:String(r),severity:n[e],properties:o};for(const e of this.options.filters??[])if(!e.filterTrace(t,this.options.client))return;this.options.client.trackTrace(t)}}handleException(e,t,r){const s={};let o;if(l(e))o=e;else if(l(t))o=t;else{if(!l(r))return void console.log("RETURNING",{message:t});o=r}"string"==typeof t&&o.message!==t&&(s.message=t),o!==r&&Object.assign(s,r);const i={exception:o,properties:s};if(2===this.options.version){for(const e of this.options.filters??[])if(!e.filterException(i,this.options.client))return}else for(const e of this.options.filters??[])if(!e.filterException(i,this.options.client))return;this.options.client.trackException({exception:o,properties:s})}log(e,t){const{level:r,message:s}=e,o=c(r),i=Reflect.get(e,Symbol.for("splat"))??[],n=i.length?i[0]:{};this.handleTrace(o,e,s,n),this.sendErrorsAsExceptions&&o>=3&&this.handleException(e,s,n),t()}},E=o(((t,...r)=>{const s=[new m(t)];return void 0===process.env.WEBSITE_INSTANCE_ID&&s.push(new e.transports.Console({format:e.format.json(),stderrLevels:["error","crit","alert","emerg"],consoleWarnLevels:["warn","warning"]})),e.format.combine(...r,e.format.json()),e.createLogger({transports:s})}),"createWinstonLogger");exports.AzureApplicationInsightsLogger=m,exports.ITelemetryFilterV2=u,exports.ITelemetryFilterV3=h,exports.createWinstonLogger=E;//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/winston-azure-application-insights.ts","../src/helpers.ts"],"names":["TransportStream","transports","format","createLogger"],"mappings":"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","file":"index.js","sourcesContent":["import TransportStream from 'winston-transport';\nimport type { SeverityLevel as KnownSeverityLevelV2, TraceTelemetry as TraceTelemetryV2 } from 'applicationinsightsv2/out/Declarations/Contracts';\nimport type { TelemetryClient as TelemetryClientV2 } from 'applicationinsightsv2';\nimport type { TelemetryClient as TelemetryClientV3, KnownSeverityLevel as KnownSeverityLevelV3, TraceTelemetry as TraceTelemetryV3, ExceptionTelemetry } from 'applicationinsightsv3';\n\ntype PlainObject = Record<string, any>;\n\nenum SeverityLevel {\n Verbose = 0,\n Information = 1,\n Warning = 2,\n Error = 3,\n Critical = 4,\n}\n\nconst severityLevelsV3: Record<SeverityLevel, KnownSeverityLevelV3> = {\n [SeverityLevel.Verbose]: 'Verbose' as KnownSeverityLevelV3,\n [SeverityLevel.Information]: 'Information' as KnownSeverityLevelV3,\n [SeverityLevel.Warning]: 'Warning' as KnownSeverityLevelV3,\n [SeverityLevel.Error]: 'Error' as KnownSeverityLevelV3,\n [SeverityLevel.Critical]: 'Critical' as KnownSeverityLevelV3,\n};\nconst severityLevelsV2: Record<SeverityLevel, KnownSeverityLevelV2> = {\n [SeverityLevel.Verbose]: 0,\n [SeverityLevel.Information]: 1,\n [SeverityLevel.Warning]: 2,\n [SeverityLevel.Error]: 3,\n [SeverityLevel.Critical]: 4,\n};\n\nconst getMessageLevel = (winstonLevel: string): SeverityLevel => {\n const levels: Record<string, SeverityLevel> = {\n emerg: SeverityLevel.Critical,\n alert: SeverityLevel.Critical,\n crit: SeverityLevel.Critical,\n error: SeverityLevel.Error,\n warning: SeverityLevel.Warning,\n warn: SeverityLevel.Warning,\n notice: SeverityLevel.Information,\n info: SeverityLevel.Information,\n verbose: SeverityLevel.Verbose,\n debug: SeverityLevel.Verbose,\n silly: SeverityLevel.Verbose,\n } as const;\n\n return levels[winstonLevel] ?? SeverityLevel.Information;\n};\n\nconst isErrorLike = (obj: unknown): obj is Error => {\n return obj instanceof Error;\n};\n\nconst isPlainObject = (obj: unknown): obj is PlainObject => {\n return obj !== null && typeof obj === 'object' && Object.getPrototypeOf(obj) === Object.prototype;\n};\n\nconst convertToPlainObject = (obj: any): PlainObject => {\n if (typeof obj !== 'object') {\n return obj;\n }\n if (isPlainObject(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n};\n\nconst extractPropsFromInfo = (info: PlainObject): PlainObject => {\n const exclude = ['level', 'message'];\n\n return Object.keys(info)\n .filter((key) => !exclude.includes(key))\n .reduce<PlainObject>((props, key) => {\n const value = info[key];\n props[key] = convertToPlainObject(value);\n return props;\n }, {});\n};\n\nconst extractErrorPropsForTrace = (errorLike: Error): PlainObject => {\n const properties: PlainObject = {\n message: errorLike.message,\n };\n for (const [key, value] of Object.entries(errorLike)) {\n if (key !== 'stack' && Object.prototype.hasOwnProperty.call(errorLike, key)) {\n properties[key] = convertToPlainObject(value);\n }\n }\n return properties;\n};\n\ntype AzureInsightsClientOptions = {\n version: 2;\n client: TelemetryClientV2;\n filters?: ITelemetryFilterV2[];\n} | {\n version: 3;\n client: TelemetryClientV3;\n filters?: ITelemetryFilterV3[];\n}\n\nexport type FilterTraceArgs = {\n message: string;\n severity: SeverityLevel;\n properties: PlainObject;\n}\n\nexport abstract class ITelemetryFilterV3 {\n public filterTrace(trace: TraceTelemetryV3, client: TelemetryClientV3): boolean { return true; }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV3): boolean { return true; }\n}\nexport abstract class ITelemetryFilterV2 {\n public filterTrace(trace: TraceTelemetryV2, client: TelemetryClientV2): boolean { return true; }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV2): boolean { return true; }\n}\n\n\nexport type AzureApplicationInsightsLoggerOptions = AzureInsightsClientOptions & {\n level?: string;\n silent?: boolean;\n sendErrorsAsExceptions?: boolean;\n}\n\nexport class AzureApplicationInsightsLogger extends TransportStream {\n public sendErrorsAsExceptions: boolean;\n readonly name: string;\n\n constructor(private readonly options: AzureApplicationInsightsLoggerOptions) {\n super({ level: options.level ?? 'info', silent: options.silent ?? false });\n this.name = 'applicationinsightslogger';\n this.sendErrorsAsExceptions = options.sendErrorsAsExceptions ?? true;\n }\n\n private handleTrace(severity: SeverityLevel, info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const traceProps = extractPropsFromInfo(info);\n let errorArg: Error | undefined;\n\n if (isErrorLike(info)) {\n errorArg = info;\n } else if (isErrorLike(message)) {\n errorArg = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n errorArg = logMeta;\n }\n\n if (errorArg) {\n Object.assign(traceProps, extractErrorPropsForTrace(errorArg));\n }\n\n if (logMeta !== errorArg) {\n Object.assign(traceProps, logMeta);\n }\n\n if (this.options.version === 3) {\n const telemetry: TraceTelemetryV3 = {\n message: String(message),\n severity: severityLevelsV3[severity],\n properties: traceProps,\n };\n for (const f of this.options.filters ?? []) {\n if (!f.filterTrace(telemetry, this.options.client)) {\n return;\n }\n }\n this.options.client.trackTrace(telemetry);\n } else {\n const telemetry: TraceTelemetryV2 = {\n message: String(message),\n severity: severityLevelsV2[severity],\n properties: traceProps,\n };\n for (const f of this.options.filters ?? []) {\n if (!f.filterTrace(telemetry, this.options.client)) {\n return;\n }\n }\n this.options.client.trackTrace(telemetry);\n }\n }\n\n private handleException(info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const exceptionProps: PlainObject = {};\n let exception: Error | undefined;\n\n if (isErrorLike(info)) {\n exception = info;\n } else if (isErrorLike(message)) {\n exception = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n exception = logMeta;\n } else {\n console.log('RETURNING', { message });\n return;\n }\n\n if (typeof message === 'string' && exception.message !== message) {\n exceptionProps.message = message;\n }\n\n if (exception !== logMeta) {\n Object.assign(exceptionProps, logMeta);\n }\n\n const telemetry: ExceptionTelemetry = { exception, properties: exceptionProps };\n if (this.options.version === 2) {\n for (const f of this.options.filters ?? []) {\n if (!f.filterException(telemetry, this.options.client)) {\n return;\n }\n }\n } else { \n for (const f of this.options.filters ?? []) {\n if (!f.filterException(telemetry, this.options.client)) {\n return;\n }\n }\n }\n this.options.client.trackException({ exception, properties: exceptionProps });\n }\n\n override log(info: PlainObject, callback: () => void): void {\n const { level, message } = info;\n const severity = getMessageLevel(level);\n const splat = Reflect.get(info, Symbol.for('splat')) ?? [];\n const logMeta = splat.length ? splat[0] : {};\n\n this.handleTrace(severity, info, message, logMeta);\n\n if (this.sendErrorsAsExceptions && severity >= SeverityLevel.Error) {\n this.handleException(info, message, logMeta);\n }\n\n callback();\n }\n}\n","import type { Format } from 'logform';\nimport { createLogger, format, transports } from 'winston';\nimport type TransportStream from 'winston-transport';\nimport { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions } from './winston-azure-application-insights';\n\nexport const isRunningInAzure = () => {\n return process.env.WEBSITE_INSTANCE_ID !== undefined;\n};\nexport const isRunningLocally = () => {\n return !isRunningInAzure();\n};\n\nexport const createWinstonLogger = (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => {\n const _transports: TransportStream[] = [\n new AzureApplicationInsightsLogger(options),\n ];\n\n if (process.env.WEBSITE_INSTANCE_ID === undefined) {\n _transports.push(\n new transports.Console({\n // format: format.combine(\n // format.errors({ stack: true }),\n // format.json()),\n format: format.json(),\n stderrLevels: ['error', 'crit', 'alert', 'emerg'],\n consoleWarnLevels: ['warn', 'warning'],\n }),\n );\n }\n\n const _format = format.combine(...fmt, format.json());\n\n return createLogger({\n // format: _format,\n transports: _transports,\n });\n};\n"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{KnownSeverityLevel as e}from"applicationinsights";import t from"winston-transport";var r=Object.defineProperty,s=(e,t)=>r(e,"name",{value:t,configurable:!0}),n={0:e.Verbose,1:e.Information,2:e.Warning,3:e.Error,4:e.Critical},o=s((e=>({emerg:4,alert:4,crit:4,error:3,warning:2,warn:2,notice:1,info:1,verbose:0,debug:0,silly:0}[e]??1)),"getMessageLevel"),i=s((e=>e instanceof Error),"isErrorLike"),c=s((e=>null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype),"isPlainObject"),a=s((e=>"object"!=typeof e||c(e)?e:Object.assign({},e)),"convertToPlainObject"),l=s((e=>{const t=["level","message"];return Object.keys(e).filter((e=>!t.includes(e))).reduce(((t,r)=>{const s=e[r];return t[r]=a(s),t}),{})}),"extractPropsFromInfo"),p=s((e=>{const t={message:e.message};for(const[r,s]of Object.entries(e))"stack"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=a(s));return t}),"extractErrorPropsForTrace"),g=class extends t{static{s(this,"AzureApplicationInsightsLogger")}client;sendErrorsAsExceptions;name;constructor(e){super({level:e.level??"info",silent:e.silent??!1}),this.client=e.client,this.name="applicationinsightslogger",this.sendErrorsAsExceptions=e.sendErrorsAsExceptions??!0}handleTrace(e,t,r,s){const o=l(t);let c;i(t)?c=t:i(r)?c=r:i(s)&&(c=s),c&&Object.assign(o,p(c)),s!==c&&Object.assign(o,s),this.client.trackTrace({message:String(r),severity:n[e],properties:o})}handleException(e,t,r){const s={};let n;if(i(e))n=e;else if(i(t))n=t;else{if(!i(r))return;n=r}"string"==typeof t&&n.message!==t&&(s.message=t),n!==r&&Object.assign(s,r),this.client.trackException({exception:n,properties:s})}log(e,t){const{level:r,message:s}=e,n=o(r),i=Reflect.get(e,Symbol.for("splat"))??[],c=i.length?i[0]:{};this.handleTrace(n,e,s,c),this.sendErrorsAsExceptions&&n>=3&&this.handleException(e,s,c),t()}};export{g as AzureApplicationInsightsLogger};//# sourceMappingURL=index.mjs.map
1
+ import{transports as e,format as t,createLogger as r}from"winston";import s from"winston-transport";var o=Object.defineProperty,i=(e,t)=>o(e,"name",{value:t,configurable:!0}),n={0:"Verbose",1:"Information",2:"Warning",3:"Error",4:"Critical"},c={0:0,1:1,2:2,3:3,4:4},l=i((e=>({emerg:4,alert:4,crit:4,error:3,warning:2,warn:2,notice:1,info:1,verbose:0,debug:0,silly:0}[e]??1)),"getMessageLevel"),a=i((e=>e instanceof Error),"isErrorLike"),p=i((e=>null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype),"isPlainObject"),f=i((e=>"object"!=typeof e||p(e)?e:Object.assign({},e)),"convertToPlainObject"),g=i((e=>{const t=["level","message"];return Object.keys(e).filter((e=>!t.includes(e))).reduce(((t,r)=>{const s=e[r];return t[r]=f(s),t}),{})}),"extractPropsFromInfo"),h=i((e=>{const t={message:e.message};for(const[r,s]of Object.entries(e))"stack"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=f(s));return t}),"extractErrorPropsForTrace"),m=class{static{i(this,"ITelemetryFilterV3")}filterTrace(e,t){return!0}filterException(e,t){return!0}},u=class{static{i(this,"ITelemetryFilterV2")}filterTrace(e,t){return!0}filterException(e,t){return!0}},E=class extends s{constructor(e){super({level:e.level??"info",silent:e.silent??!1}),this.options=e,this.name="applicationinsightslogger",this.sendErrorsAsExceptions=e.sendErrorsAsExceptions??!0}static{i(this,"AzureApplicationInsightsLogger")}sendErrorsAsExceptions;name;handleTrace(e,t,r,s){const o=g(t);let i;if(a(t)?i=t:a(r)?i=r:a(s)&&(i=s),i&&Object.assign(o,h(i)),s!==i&&Object.assign(o,s),3===this.options.version){const t={message:String(r),severity:n[e],properties:o};for(const e of this.options.filters??[])if(!e.filterTrace(t,this.options.client))return;this.options.client.trackTrace(t)}else{const t={message:String(r),severity:c[e],properties:o};for(const e of this.options.filters??[])if(!e.filterTrace(t,this.options.client))return;this.options.client.trackTrace(t)}}handleException(e,t,r){const s={};let o;if(a(e))o=e;else if(a(t))o=t;else{if(!a(r))return void console.log("RETURNING",{message:t});o=r}"string"==typeof t&&o.message!==t&&(s.message=t),o!==r&&Object.assign(s,r);const i={exception:o,properties:s};if(2===this.options.version){for(const e of this.options.filters??[])if(!e.filterException(i,this.options.client))return}else for(const e of this.options.filters??[])if(!e.filterException(i,this.options.client))return;this.options.client.trackException({exception:o,properties:s})}log(e,t){const{level:r,message:s}=e,o=l(r),i=Reflect.get(e,Symbol.for("splat"))??[],n=i.length?i[0]:{};this.handleTrace(o,e,s,n),this.sendErrorsAsExceptions&&o>=3&&this.handleException(e,s,n),t()}},b=i(((s,...o)=>{const i=[new E(s)];return void 0===process.env.WEBSITE_INSTANCE_ID&&i.push(new e.Console({format:t.json(),stderrLevels:["error","crit","alert","emerg"],consoleWarnLevels:["warn","warning"]})),t.combine(...o,t.json()),r({transports:i})}),"createWinstonLogger");export{E as AzureApplicationInsightsLogger,u as ITelemetryFilterV2,m as ITelemetryFilterV3,b as createWinstonLogger};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/winston-azure-application-insights.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { TelemetryClient, KnownSeverityLevel } from 'applicationinsights';\nimport TransportStream from 'winston-transport';\n\ntype PlainObject = Record<string, any>;\n\nenum SeverityLevel {\n Verbose = 0,\n Information = 1,\n Warning = 2,\n Error = 3,\n Critical = 4,\n}\n\nconst knownSeverityLevels: Record<SeverityLevel, KnownSeverityLevel> = {\n [SeverityLevel.Verbose]: KnownSeverityLevel.Verbose,\n [SeverityLevel.Information]: KnownSeverityLevel.Information,\n [SeverityLevel.Warning]: KnownSeverityLevel.Warning,\n [SeverityLevel.Error]: KnownSeverityLevel.Error,\n [SeverityLevel.Critical]: KnownSeverityLevel.Critical,\n};\n\n\nconst getMessageLevel = (winstonLevel: string): SeverityLevel => {\n const levels: Record<string, SeverityLevel> = {\n emerg: SeverityLevel.Critical,\n alert: SeverityLevel.Critical,\n crit: SeverityLevel.Critical,\n error: SeverityLevel.Error,\n warning: SeverityLevel.Warning,\n warn: SeverityLevel.Warning,\n notice: SeverityLevel.Information,\n info: SeverityLevel.Information,\n verbose: SeverityLevel.Verbose,\n debug: SeverityLevel.Verbose,\n silly: SeverityLevel.Verbose,\n } as const;\n\n return levels[winstonLevel] ?? SeverityLevel.Information;\n};\n\nconst isErrorLike = (obj: unknown): obj is Error => {\n return obj instanceof Error;\n};\n\n\nconst isPlainObject = (obj: unknown): obj is PlainObject => {\n return obj !== null && typeof obj === 'object' && Object.getPrototypeOf(obj) === Object.prototype;\n};\n\nconst convertToPlainObject = (obj: any): PlainObject => {\n if (typeof obj !== 'object') {\n return obj;\n }\n if (isPlainObject(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n};\n\nconst extractPropsFromInfo = (info: PlainObject): PlainObject => {\n const exclude = ['level', 'message'];\n\n return Object.keys(info)\n .filter((key) => !exclude.includes(key))\n .reduce<PlainObject>((props, key) => {\n const value = info[key];\n props[key] = convertToPlainObject(value);\n return props;\n }, {});\n};\n\nconst extractErrorPropsForTrace = (errorLike: Error): PlainObject => {\n const properties: PlainObject = {\n message: errorLike.message,\n };\n for (const [key, value] of Object.entries(errorLike)) {\n if (key !== 'stack' && Object.prototype.hasOwnProperty.call(errorLike, key)) {\n properties[key] = convertToPlainObject(value);\n }\n }\n return properties;\n};\n\nexport interface AzureApplicationInsightsLoggerOptions {\n client: TelemetryClient;\n level?: string;\n silent?: boolean;\n sendErrorsAsExceptions?: boolean;\n}\n\nexport class AzureApplicationInsightsLogger extends TransportStream {\n public readonly client: TelemetryClient;\n public sendErrorsAsExceptions: boolean;\n readonly name: string;\n\n constructor(options: AzureApplicationInsightsLoggerOptions) {\n super({ level: options.level ?? 'info', silent: options.silent ?? false });\n this.client = options.client;\n this.name = 'applicationinsightslogger';\n this.sendErrorsAsExceptions = options.sendErrorsAsExceptions ?? true;\n }\n\n private handleTrace(severity: SeverityLevel, info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const traceProps = extractPropsFromInfo(info);\n let errorArg: Error | undefined;\n\n if (isErrorLike(info)) {\n errorArg = info;\n } else if (isErrorLike(message)) {\n errorArg = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n errorArg = logMeta;\n }\n\n if (errorArg) {\n Object.assign(traceProps, extractErrorPropsForTrace(errorArg));\n }\n\n if (logMeta !== errorArg) {\n Object.assign(traceProps, logMeta);\n }\n\n this.client.trackTrace({\n message: String(message),\n severity: knownSeverityLevels[severity],\n properties: traceProps,\n });\n }\n\n private handleException(info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const exceptionProps: PlainObject = {};\n let exception: Error | undefined;\n\n if (isErrorLike(info)) {\n exception = info;\n } else if (isErrorLike(message)) {\n exception = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n exception = logMeta;\n } else {\n return;\n }\n\n if (typeof message === 'string' && exception.message !== message) {\n exceptionProps.message = message;\n }\n\n if (exception !== logMeta) {\n Object.assign(exceptionProps, logMeta);\n }\n\n this.client.trackException({ exception, properties: exceptionProps });\n }\n\n override log(info: PlainObject, callback: () => void): void {\n const { level, message } = info;\n const severity = getMessageLevel(level);\n const splat = Reflect.get(info, Symbol.for('splat')) ?? [];\n const logMeta = splat.length ? splat[0] : {};\n\n this.handleTrace(severity, info, message, logMeta);\n\n if (this.sendErrorsAsExceptions && severity >= SeverityLevel.Error) {\n this.handleException(info, message, logMeta);\n }\n\n callback();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/winston-azure-application-insights.ts","../src/helpers.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import TransportStream from 'winston-transport';\nimport type { SeverityLevel as KnownSeverityLevelV2, TraceTelemetry as TraceTelemetryV2 } from 'applicationinsightsv2/out/Declarations/Contracts';\nimport type { TelemetryClient as TelemetryClientV2 } from 'applicationinsightsv2';\nimport type { TelemetryClient as TelemetryClientV3, KnownSeverityLevel as KnownSeverityLevelV3, TraceTelemetry as TraceTelemetryV3, ExceptionTelemetry } from 'applicationinsightsv3';\n\ntype PlainObject = Record<string, any>;\n\nenum SeverityLevel {\n Verbose = 0,\n Information = 1,\n Warning = 2,\n Error = 3,\n Critical = 4,\n}\n\nconst severityLevelsV3: Record<SeverityLevel, KnownSeverityLevelV3> = {\n [SeverityLevel.Verbose]: 'Verbose' as KnownSeverityLevelV3,\n [SeverityLevel.Information]: 'Information' as KnownSeverityLevelV3,\n [SeverityLevel.Warning]: 'Warning' as KnownSeverityLevelV3,\n [SeverityLevel.Error]: 'Error' as KnownSeverityLevelV3,\n [SeverityLevel.Critical]: 'Critical' as KnownSeverityLevelV3,\n};\nconst severityLevelsV2: Record<SeverityLevel, KnownSeverityLevelV2> = {\n [SeverityLevel.Verbose]: 0,\n [SeverityLevel.Information]: 1,\n [SeverityLevel.Warning]: 2,\n [SeverityLevel.Error]: 3,\n [SeverityLevel.Critical]: 4,\n};\n\nconst getMessageLevel = (winstonLevel: string): SeverityLevel => {\n const levels: Record<string, SeverityLevel> = {\n emerg: SeverityLevel.Critical,\n alert: SeverityLevel.Critical,\n crit: SeverityLevel.Critical,\n error: SeverityLevel.Error,\n warning: SeverityLevel.Warning,\n warn: SeverityLevel.Warning,\n notice: SeverityLevel.Information,\n info: SeverityLevel.Information,\n verbose: SeverityLevel.Verbose,\n debug: SeverityLevel.Verbose,\n silly: SeverityLevel.Verbose,\n } as const;\n\n return levels[winstonLevel] ?? SeverityLevel.Information;\n};\n\nconst isErrorLike = (obj: unknown): obj is Error => {\n return obj instanceof Error;\n};\n\nconst isPlainObject = (obj: unknown): obj is PlainObject => {\n return obj !== null && typeof obj === 'object' && Object.getPrototypeOf(obj) === Object.prototype;\n};\n\nconst convertToPlainObject = (obj: any): PlainObject => {\n if (typeof obj !== 'object') {\n return obj;\n }\n if (isPlainObject(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n};\n\nconst extractPropsFromInfo = (info: PlainObject): PlainObject => {\n const exclude = ['level', 'message'];\n\n return Object.keys(info)\n .filter((key) => !exclude.includes(key))\n .reduce<PlainObject>((props, key) => {\n const value = info[key];\n props[key] = convertToPlainObject(value);\n return props;\n }, {});\n};\n\nconst extractErrorPropsForTrace = (errorLike: Error): PlainObject => {\n const properties: PlainObject = {\n message: errorLike.message,\n };\n for (const [key, value] of Object.entries(errorLike)) {\n if (key !== 'stack' && Object.prototype.hasOwnProperty.call(errorLike, key)) {\n properties[key] = convertToPlainObject(value);\n }\n }\n return properties;\n};\n\ntype AzureInsightsClientOptions = {\n version: 2;\n client: TelemetryClientV2;\n filters?: ITelemetryFilterV2[];\n} | {\n version: 3;\n client: TelemetryClientV3;\n filters?: ITelemetryFilterV3[];\n}\n\nexport type FilterTraceArgs = {\n message: string;\n severity: SeverityLevel;\n properties: PlainObject;\n}\n\nexport abstract class ITelemetryFilterV3 {\n public filterTrace(trace: TraceTelemetryV3, client: TelemetryClientV3): boolean { return true; }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV3): boolean { return true; }\n}\nexport abstract class ITelemetryFilterV2 {\n public filterTrace(trace: TraceTelemetryV2, client: TelemetryClientV2): boolean { return true; }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV2): boolean { return true; }\n}\n\n\nexport type AzureApplicationInsightsLoggerOptions = AzureInsightsClientOptions & {\n level?: string;\n silent?: boolean;\n sendErrorsAsExceptions?: boolean;\n}\n\nexport class AzureApplicationInsightsLogger extends TransportStream {\n public sendErrorsAsExceptions: boolean;\n readonly name: string;\n\n constructor(private readonly options: AzureApplicationInsightsLoggerOptions) {\n super({ level: options.level ?? 'info', silent: options.silent ?? false });\n this.name = 'applicationinsightslogger';\n this.sendErrorsAsExceptions = options.sendErrorsAsExceptions ?? true;\n }\n\n private handleTrace(severity: SeverityLevel, info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const traceProps = extractPropsFromInfo(info);\n let errorArg: Error | undefined;\n\n if (isErrorLike(info)) {\n errorArg = info;\n } else if (isErrorLike(message)) {\n errorArg = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n errorArg = logMeta;\n }\n\n if (errorArg) {\n Object.assign(traceProps, extractErrorPropsForTrace(errorArg));\n }\n\n if (logMeta !== errorArg) {\n Object.assign(traceProps, logMeta);\n }\n\n if (this.options.version === 3) {\n const telemetry: TraceTelemetryV3 = {\n message: String(message),\n severity: severityLevelsV3[severity],\n properties: traceProps,\n };\n for (const f of this.options.filters ?? []) {\n if (!f.filterTrace(telemetry, this.options.client)) {\n return;\n }\n }\n this.options.client.trackTrace(telemetry);\n } else {\n const telemetry: TraceTelemetryV2 = {\n message: String(message),\n severity: severityLevelsV2[severity],\n properties: traceProps,\n };\n for (const f of this.options.filters ?? []) {\n if (!f.filterTrace(telemetry, this.options.client)) {\n return;\n }\n }\n this.options.client.trackTrace(telemetry);\n }\n }\n\n private handleException(info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const exceptionProps: PlainObject = {};\n let exception: Error | undefined;\n\n if (isErrorLike(info)) {\n exception = info;\n } else if (isErrorLike(message)) {\n exception = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n exception = logMeta;\n } else {\n console.log('RETURNING', { message });\n return;\n }\n\n if (typeof message === 'string' && exception.message !== message) {\n exceptionProps.message = message;\n }\n\n if (exception !== logMeta) {\n Object.assign(exceptionProps, logMeta);\n }\n\n const telemetry: ExceptionTelemetry = { exception, properties: exceptionProps };\n if (this.options.version === 2) {\n for (const f of this.options.filters ?? []) {\n if (!f.filterException(telemetry, this.options.client)) {\n return;\n }\n }\n } else { \n for (const f of this.options.filters ?? []) {\n if (!f.filterException(telemetry, this.options.client)) {\n return;\n }\n }\n }\n this.options.client.trackException({ exception, properties: exceptionProps });\n }\n\n override log(info: PlainObject, callback: () => void): void {\n const { level, message } = info;\n const severity = getMessageLevel(level);\n const splat = Reflect.get(info, Symbol.for('splat')) ?? [];\n const logMeta = splat.length ? splat[0] : {};\n\n this.handleTrace(severity, info, message, logMeta);\n\n if (this.sendErrorsAsExceptions && severity >= SeverityLevel.Error) {\n this.handleException(info, message, logMeta);\n }\n\n callback();\n }\n}\n","import type { Format } from 'logform';\nimport { createLogger, format, transports } from 'winston';\nimport type TransportStream from 'winston-transport';\nimport { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions } from './winston-azure-application-insights';\n\nexport const isRunningInAzure = () => {\n return process.env.WEBSITE_INSTANCE_ID !== undefined;\n};\nexport const isRunningLocally = () => {\n return !isRunningInAzure();\n};\n\nexport const createWinstonLogger = (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => {\n const _transports: TransportStream[] = [\n new AzureApplicationInsightsLogger(options),\n ];\n\n if (process.env.WEBSITE_INSTANCE_ID === undefined) {\n _transports.push(\n new transports.Console({\n // format: format.combine(\n // format.errors({ stack: true }),\n // format.json()),\n format: format.json(),\n stderrLevels: ['error', 'crit', 'alert', 'emerg'],\n consoleWarnLevels: ['warn', 'warning'],\n }),\n );\n }\n\n const _format = format.combine(...fmt, format.json());\n\n return createLogger({\n // format: _format,\n transports: _transports,\n });\n};\n"]}
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@shellicar/winston-azure-application-insights",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
4
4
  "private": false,
5
5
  "description": "Azure Application Insights transport for Winston",
6
6
  "files": [
7
7
  "dist"
8
8
  ],
9
- "main": "./dist/index.cjs",
9
+ "main": "./dist/index.js",
10
10
  "module": "./dist/index.mjs",
11
11
  "types": "./dist/index.d.ts",
12
12
  "exports": {
13
13
  "require": {
14
14
  "types": "./dist/index.d.ts",
15
- "default": "./dist/index.cjs"
15
+ "default": "./dist/index.js"
16
16
  },
17
17
  "import": {
18
- "types": "./dist/index.d.ts",
18
+ "types": "./dist/index.d.mts",
19
19
  "default": "./dist/index.mjs"
20
20
  }
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",
24
- "url": "git+https://github.com/willmorgan/winston-azure-application-insights.git"
24
+ "url": "git+https://github.com/shellicar/winston-azure-application-insights.git"
25
25
  },
26
26
  "keywords": [
27
27
  "winston",
@@ -43,14 +43,15 @@
43
43
  ],
44
44
  "license": "MIT",
45
45
  "devDependencies": {
46
+ "@biomejs/biome": "^1.9.2",
46
47
  "@types/mocha": "^10.0.8",
47
48
  "@types/node": "^22.5.5",
48
49
  "@typescript-eslint/eslint-plugin": "^8.6.0",
49
50
  "@typescript-eslint/parser": "^8.6.0",
50
- "eslint": "^9.11.0",
51
51
  "eslint-config-airbnb-base": "^15.0.0",
52
52
  "eslint-plugin-import": "^2.29.0",
53
53
  "globals": "^15.9.0",
54
+ "logform": "^2.6.1",
54
55
  "mocha": "^10.7.3",
55
56
  "npm-run-all2": "^6.2.3",
56
57
  "terser": "^5.33.0",
@@ -60,21 +61,27 @@
60
61
  "typescript": "^5.6.2",
61
62
  "winston": "^3.14.2"
62
63
  },
64
+ "optionalDependencies": {
65
+ "applicationinsightsv2": "npm:applicationinsights@^2",
66
+ "applicationinsightsv3": "npm:applicationinsights@^3"
67
+ },
63
68
  "bugs": {
64
69
  "url": "https://github.com/shellicar/winston-azure-application-insights/issues"
65
70
  },
66
71
  "homepage": "https://github.com/shellicar/winston-azure-application-insights#readme",
72
+ "peerDependencies": {
73
+ "winston": "^3.0.0",
74
+ "winston-transport": "^4.0.0"
75
+ },
67
76
  "dependencies": {
68
- "applicationinsights": "^3.3.0",
69
77
  "winston-transport": "^4.7.1"
70
78
  },
71
79
  "scripts": {
72
80
  "demo": "tsx demo.ts",
73
- "build": "run-s build:source build:types",
74
- "build:source": "tsup",
75
- "build:types": "tsup --dts-only --format cjs",
76
- "lint": "eslint .",
77
- "lint-fix": "eslint . --fix",
81
+ "build": "tsup-node",
82
+ "lint": "biome lint",
83
+ "format": "biome format",
84
+ "check": "biome check",
78
85
  "test": "mocha"
79
86
  }
80
87
  }
package/dist/index.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";var e=require("applicationinsights");function t(e){return e&&e.__esModule?e:{default:e}}var r=t(require("winston-transport")),s=Object.defineProperty,n=(e,t)=>s(e,"name",{value:t,configurable:!0}),i={0:e.KnownSeverityLevel.Verbose,1:e.KnownSeverityLevel.Information,2:e.KnownSeverityLevel.Warning,3:e.KnownSeverityLevel.Error,4:e.KnownSeverityLevel.Critical},o=n((e=>({emerg:4,alert:4,crit:4,error:3,warning:2,warn:2,notice:1,info:1,verbose:0,debug:0,silly:0}[e]??1)),"getMessageLevel"),c=n((e=>e instanceof Error),"isErrorLike"),l=n((e=>null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype),"isPlainObject"),a=n((e=>"object"!=typeof e||l(e)?e:Object.assign({},e)),"convertToPlainObject"),p=n((e=>{const t=["level","message"];return Object.keys(e).filter((e=>!t.includes(e))).reduce(((t,r)=>{const s=e[r];return t[r]=a(s),t}),{})}),"extractPropsFromInfo"),g=n((e=>{const t={message:e.message};for(const[r,s]of Object.entries(e))"stack"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=a(s));return t}),"extractErrorPropsForTrace"),f=class extends r.default{static{n(this,"AzureApplicationInsightsLogger")}client;sendErrorsAsExceptions;name;constructor(e){super({level:e.level??"info",silent:e.silent??!1}),this.client=e.client,this.name="applicationinsightslogger",this.sendErrorsAsExceptions=e.sendErrorsAsExceptions??!0}handleTrace(e,t,r,s){const n=p(t);let o;c(t)?o=t:c(r)?o=r:c(s)&&(o=s),o&&Object.assign(n,g(o)),s!==o&&Object.assign(n,s),this.client.trackTrace({message:String(r),severity:i[e],properties:n})}handleException(e,t,r){const s={};let n;if(c(e))n=e;else if(c(t))n=t;else{if(!c(r))return;n=r}"string"==typeof t&&n.message!==t&&(s.message=t),n!==r&&Object.assign(s,r),this.client.trackException({exception:n,properties:s})}log(e,t){const{level:r,message:s}=e,n=o(r),i=Reflect.get(e,Symbol.for("splat"))??[],c=i.length?i[0]:{};this.handleTrace(n,e,s,c),this.sendErrorsAsExceptions&&n>=3&&this.handleException(e,s,c),t()}};exports.AzureApplicationInsightsLogger=f;//# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/winston-azure-application-insights.ts"],"names":["KnownSeverityLevel","TransportStream"],"mappings":"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","file":"index.cjs","sourcesContent":["import { TelemetryClient, KnownSeverityLevel } from 'applicationinsights';\nimport TransportStream from 'winston-transport';\n\ntype PlainObject = Record<string, any>;\n\nenum SeverityLevel {\n Verbose = 0,\n Information = 1,\n Warning = 2,\n Error = 3,\n Critical = 4,\n}\n\nconst knownSeverityLevels: Record<SeverityLevel, KnownSeverityLevel> = {\n [SeverityLevel.Verbose]: KnownSeverityLevel.Verbose,\n [SeverityLevel.Information]: KnownSeverityLevel.Information,\n [SeverityLevel.Warning]: KnownSeverityLevel.Warning,\n [SeverityLevel.Error]: KnownSeverityLevel.Error,\n [SeverityLevel.Critical]: KnownSeverityLevel.Critical,\n};\n\n\nconst getMessageLevel = (winstonLevel: string): SeverityLevel => {\n const levels: Record<string, SeverityLevel> = {\n emerg: SeverityLevel.Critical,\n alert: SeverityLevel.Critical,\n crit: SeverityLevel.Critical,\n error: SeverityLevel.Error,\n warning: SeverityLevel.Warning,\n warn: SeverityLevel.Warning,\n notice: SeverityLevel.Information,\n info: SeverityLevel.Information,\n verbose: SeverityLevel.Verbose,\n debug: SeverityLevel.Verbose,\n silly: SeverityLevel.Verbose,\n } as const;\n\n return levels[winstonLevel] ?? SeverityLevel.Information;\n};\n\nconst isErrorLike = (obj: unknown): obj is Error => {\n return obj instanceof Error;\n};\n\n\nconst isPlainObject = (obj: unknown): obj is PlainObject => {\n return obj !== null && typeof obj === 'object' && Object.getPrototypeOf(obj) === Object.prototype;\n};\n\nconst convertToPlainObject = (obj: any): PlainObject => {\n if (typeof obj !== 'object') {\n return obj;\n }\n if (isPlainObject(obj)) {\n return obj;\n }\n return Object.assign({}, obj);\n};\n\nconst extractPropsFromInfo = (info: PlainObject): PlainObject => {\n const exclude = ['level', 'message'];\n\n return Object.keys(info)\n .filter((key) => !exclude.includes(key))\n .reduce<PlainObject>((props, key) => {\n const value = info[key];\n props[key] = convertToPlainObject(value);\n return props;\n }, {});\n};\n\nconst extractErrorPropsForTrace = (errorLike: Error): PlainObject => {\n const properties: PlainObject = {\n message: errorLike.message,\n };\n for (const [key, value] of Object.entries(errorLike)) {\n if (key !== 'stack' && Object.prototype.hasOwnProperty.call(errorLike, key)) {\n properties[key] = convertToPlainObject(value);\n }\n }\n return properties;\n};\n\nexport interface AzureApplicationInsightsLoggerOptions {\n client: TelemetryClient;\n level?: string;\n silent?: boolean;\n sendErrorsAsExceptions?: boolean;\n}\n\nexport class AzureApplicationInsightsLogger extends TransportStream {\n public readonly client: TelemetryClient;\n public sendErrorsAsExceptions: boolean;\n readonly name: string;\n\n constructor(options: AzureApplicationInsightsLoggerOptions) {\n super({ level: options.level ?? 'info', silent: options.silent ?? false });\n this.client = options.client;\n this.name = 'applicationinsightslogger';\n this.sendErrorsAsExceptions = options.sendErrorsAsExceptions ?? true;\n }\n\n private handleTrace(severity: SeverityLevel, info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const traceProps = extractPropsFromInfo(info);\n let errorArg: Error | undefined;\n\n if (isErrorLike(info)) {\n errorArg = info;\n } else if (isErrorLike(message)) {\n errorArg = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n errorArg = logMeta;\n }\n\n if (errorArg) {\n Object.assign(traceProps, extractErrorPropsForTrace(errorArg));\n }\n\n if (logMeta !== errorArg) {\n Object.assign(traceProps, logMeta);\n }\n\n this.client.trackTrace({\n message: String(message),\n severity: knownSeverityLevels[severity],\n properties: traceProps,\n });\n }\n\n private handleException(info: PlainObject, message: string | undefined, logMeta: PlainObject): void {\n const exceptionProps: PlainObject = {};\n let exception: Error | undefined;\n\n if (isErrorLike(info)) {\n exception = info;\n } else if (isErrorLike(message)) {\n exception = message as unknown as Error;\n } else if (isErrorLike(logMeta)) {\n exception = logMeta;\n } else {\n return;\n }\n\n if (typeof message === 'string' && exception.message !== message) {\n exceptionProps.message = message;\n }\n\n if (exception !== logMeta) {\n Object.assign(exceptionProps, logMeta);\n }\n\n this.client.trackException({ exception, properties: exceptionProps });\n }\n\n override log(info: PlainObject, callback: () => void): void {\n const { level, message } = info;\n const severity = getMessageLevel(level);\n const splat = Reflect.get(info, Symbol.for('splat')) ?? [];\n const logMeta = splat.length ? splat[0] : {};\n\n this.handleTrace(severity, info, message, logMeta);\n\n if (this.sendErrorsAsExceptions && severity >= SeverityLevel.Error) {\n this.handleException(info, message, logMeta);\n }\n\n callback();\n }\n}\n"]}