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

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.
package/README.md CHANGED
@@ -50,6 +50,7 @@ import { AzureApplicationInsightsLogger } from '@shellicar/winston-azure-applica
50
50
  setup().start();
51
51
 
52
52
  const insightsLogger = new AzureApplicationInsightsLogger({
53
+ version: 3, // or 2 if using applicationinsights^3
53
54
  client: defaultClient,
54
55
  });
55
56
  ```
@@ -60,6 +61,7 @@ const { AzureApplicationInsightsLogger } = require('@shellicar/winston-azure-app
60
61
  setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING).start();
61
62
 
62
63
  const insightsLogger = new AzureApplicationInsightsLogger({
64
+ version: 3,
63
65
  client: defaultClient,
64
66
  });
65
67
  ```
package/dist/index.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as winston from 'winston';
2
2
  import { Format } from 'logform';
3
- import TransportStream from 'winston-transport';
4
- import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
5
3
  import { TelemetryClient as TelemetryClient$1 } from 'applicationinsightsv2';
4
+ import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
6
5
  import { TraceTelemetry, TelemetryClient, ExceptionTelemetry } from 'applicationinsightsv3';
6
+ import TransportStream from 'winston-transport';
7
7
 
8
8
  type PlainObject = Record<string, any>;
9
9
  type AzureInsightsClientOptions = {
@@ -32,12 +32,27 @@ declare class AzureApplicationInsightsLogger extends TransportStream {
32
32
  private readonly options;
33
33
  sendErrorsAsExceptions: boolean;
34
34
  readonly name: string;
35
+ get client(): TelemetryClient | TelemetryClient$1;
35
36
  constructor(options: AzureApplicationInsightsLoggerOptions);
36
37
  private handleTrace;
37
38
  private handleException;
38
39
  log(info: PlainObject, callback: () => void): void;
39
40
  }
40
41
 
41
- declare const createWinstonLogger: (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => winston.Logger;
42
+ declare const isRunningInAzure: () => boolean;
43
+ declare const isRunningLocally: () => boolean;
44
+ type JsonValue = string | number | JsonObject | JsonValue[] | null;
45
+ type JsonObject = {
46
+ [key: string]: JsonValue;
47
+ };
48
+ type CreateWinstonLoggerOptions = {
49
+ insights: AzureApplicationInsightsLoggerOptions;
50
+ winston: {
51
+ defaultMeta?: JsonObject;
52
+ console: boolean;
53
+ format?: Format[];
54
+ };
55
+ };
56
+ declare const createWinstonLogger: (options: CreateWinstonLoggerOptions) => winston.Logger;
42
57
 
43
- export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger };
58
+ export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, type CreateWinstonLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger, isRunningInAzure, isRunningLocally };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as winston from 'winston';
2
2
  import { Format } from 'logform';
3
- import TransportStream from 'winston-transport';
4
- import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
5
3
  import { TelemetryClient as TelemetryClient$1 } from 'applicationinsightsv2';
4
+ import { TraceTelemetry as TraceTelemetry$1 } from 'applicationinsightsv2/out/Declarations/Contracts';
6
5
  import { TraceTelemetry, TelemetryClient, ExceptionTelemetry } from 'applicationinsightsv3';
6
+ import TransportStream from 'winston-transport';
7
7
 
8
8
  type PlainObject = Record<string, any>;
9
9
  type AzureInsightsClientOptions = {
@@ -32,12 +32,27 @@ declare class AzureApplicationInsightsLogger extends TransportStream {
32
32
  private readonly options;
33
33
  sendErrorsAsExceptions: boolean;
34
34
  readonly name: string;
35
+ get client(): TelemetryClient | TelemetryClient$1;
35
36
  constructor(options: AzureApplicationInsightsLoggerOptions);
36
37
  private handleTrace;
37
38
  private handleException;
38
39
  log(info: PlainObject, callback: () => void): void;
39
40
  }
40
41
 
41
- declare const createWinstonLogger: (options: AzureApplicationInsightsLoggerOptions, ...fmt: Format[]) => winston.Logger;
42
+ declare const isRunningInAzure: () => boolean;
43
+ declare const isRunningLocally: () => boolean;
44
+ type JsonValue = string | number | JsonObject | JsonValue[] | null;
45
+ type JsonObject = {
46
+ [key: string]: JsonValue;
47
+ };
48
+ type CreateWinstonLoggerOptions = {
49
+ insights: AzureApplicationInsightsLoggerOptions;
50
+ winston: {
51
+ defaultMeta?: JsonObject;
52
+ console: boolean;
53
+ format?: Format[];
54
+ };
55
+ };
56
+ declare const createWinstonLogger: (options: CreateWinstonLoggerOptions) => winston.Logger;
42
57
 
43
- export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger };
58
+ export { AzureApplicationInsightsLogger, type AzureApplicationInsightsLoggerOptions, type CreateWinstonLoggerOptions, ITelemetryFilterV2, ITelemetryFilterV3, createWinstonLogger, isRunningInAzure, isRunningLocally };
package/dist/index.js CHANGED
@@ -1 +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
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}),n={0:"Verbose",1:"Information",2:"Warning",3:"Error",4:"Critical"},i={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"),u=class{static{o(this,"ITelemetryFilterV3")}filterTrace(e,t){return!0}filterException(e,t){return!0}},h=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;get client(){return this.options.client}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: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:i[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 n={exception:o,properties:s};if(2===this.options.version){for(const e of this.options.filters??[])if(!e.filterException(n,this.options.client))return}else for(const e of this.options.filters??[])if(!e.filterException(n,this.options.client))return;this.options.client.trackException({exception:o,properties:s})}log(e,t){const{level:r,message:s}=e,o=c(r),n=Reflect.get(e,Symbol.for("splat"))??[],i=n.length?n[0]:{};this.handleTrace(o,e,s,i),this.sendErrorsAsExceptions&&o>=3&&this.handleException(e,s,i),t()}},b=o((t=>{const r=[new m(t.insights)];t.winston.console&&r.push(new e.transports.Console({format:e.format.json(),stderrLevels:["error","crit","alert","emerg"],consoleWarnLevels:["warn","warning"]}));const s=e.format.combine(...t.winston.format??[],e.format.json());return e.createLogger({format:s,transports:r,defaultMeta:t.winston.defaultMeta})}),"createWinstonLogger");exports.AzureApplicationInsightsLogger=m,exports.ITelemetryFilterV2=h,exports.ITelemetryFilterV3=u,exports.createWinstonLogger=b;//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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"]}
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 type { TelemetryClient as TelemetryClientV2 } from 'applicationinsightsv2';\nimport type { SeverityLevel as KnownSeverityLevelV2, TraceTelemetry as TraceTelemetryV2 } from 'applicationinsightsv2/out/Declarations/Contracts';\nimport type { ExceptionTelemetry, KnownSeverityLevel as KnownSeverityLevelV3, TelemetryClient as TelemetryClientV3, TraceTelemetry as TraceTelemetryV3 } from 'applicationinsightsv3';\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 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 | {\n version: 2;\n client: TelemetryClientV2;\n filters?: ITelemetryFilterV2[];\n }\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 {\n return true;\n }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV3): boolean {\n return true;\n }\n}\nexport abstract class ITelemetryFilterV2 {\n public filterTrace(trace: TraceTelemetryV2, client: TelemetryClientV2): boolean {\n return true;\n }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV2): boolean {\n 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 public get client(): TelemetryClientV3 | TelemetryClientV2 {\n return this.options.client;\n }\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\ntype JsonValue = string | number | JsonObject | JsonValue[] | null;\ntype JsonObject = {\n [key: string]: JsonValue;\n};\n\nexport type CreateWinstonLoggerOptions = {\n insights: AzureApplicationInsightsLoggerOptions;\n winston: {\n defaultMeta?: JsonObject;\n console: boolean;\n format?: Format[];\n };\n};\n\nexport const createWinstonLogger = (options: CreateWinstonLoggerOptions) => {\n const _transports: TransportStream[] = [new AzureApplicationInsightsLogger(options.insights)];\n\n if (options.winston.console) {\n _transports.push(\n new transports.Console({\n format: format.json(),\n stderrLevels: ['error', 'crit', 'alert', 'emerg'],\n consoleWarnLevels: ['warn', 'warning'],\n }),\n );\n }\n\n const _format = format.combine(...(options.winston.format ?? []), format.json());\n\n return createLogger({\n format: _format,\n transports: _transports,\n defaultMeta: options.winston.defaultMeta,\n });\n};\n"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
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
+ import{transports as e,format as t,createLogger as s}from"winston";import r from"winston-transport";var o=Object.defineProperty,n=(e,t)=>o(e,"name",{value:t,configurable:!0}),i={0:"Verbose",1:"Information",2:"Warning",3:"Error",4:"Critical"},c={0:0,1:1,2:2,3:3,4:4},l=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"),a=n((e=>e instanceof Error),"isErrorLike"),p=n((e=>null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype),"isPlainObject"),f=n((e=>"object"!=typeof e||p(e)?e:Object.assign({},e)),"convertToPlainObject"),g=n((e=>{const t=["level","message"];return Object.keys(e).filter((e=>!t.includes(e))).reduce(((t,s)=>{const r=e[s];return t[s]=f(r),t}),{})}),"extractPropsFromInfo"),h=n((e=>{const t={message:e.message};for(const[s,r]of Object.entries(e))"stack"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=f(r));return t}),"extractErrorPropsForTrace"),m=class{static{n(this,"ITelemetryFilterV3")}filterTrace(e,t){return!0}filterException(e,t){return!0}},u=class{static{n(this,"ITelemetryFilterV2")}filterTrace(e,t){return!0}filterException(e,t){return!0}},b=class extends r{constructor(e){super({level:e.level??"info",silent:e.silent??!1}),this.options=e,this.name="applicationinsightslogger",this.sendErrorsAsExceptions=e.sendErrorsAsExceptions??!0}static{n(this,"AzureApplicationInsightsLogger")}sendErrorsAsExceptions;name;get client(){return this.options.client}handleTrace(e,t,s,r){const o=g(t);let n;if(a(t)?n=t:a(s)?n=s:a(r)&&(n=r),n&&Object.assign(o,h(n)),r!==n&&Object.assign(o,r),3===this.options.version){const t={message:String(s),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(s),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,s){const r={};let o;if(a(e))o=e;else if(a(t))o=t;else{if(!a(s))return void console.log("RETURNING",{message:t});o=s}"string"==typeof t&&o.message!==t&&(r.message=t),o!==s&&Object.assign(r,s);const n={exception:o,properties:r};if(2===this.options.version){for(const e of this.options.filters??[])if(!e.filterException(n,this.options.client))return}else for(const e of this.options.filters??[])if(!e.filterException(n,this.options.client))return;this.options.client.trackException({exception:o,properties:r})}log(e,t){const{level:s,message:r}=e,o=l(s),n=Reflect.get(e,Symbol.for("splat"))??[],i=n.length?n[0]:{};this.handleTrace(o,e,r,i),this.sendErrorsAsExceptions&&o>=3&&this.handleException(e,r,i),t()}},E=n((r=>{const o=[new b(r.insights)];r.winston.console&&o.push(new e.Console({format:t.json(),stderrLevels:["error","crit","alert","emerg"],consoleWarnLevels:["warn","warning"]}));const n=t.combine(...r.winston.format??[],t.json());return s({format:n,transports:o,defaultMeta:r.winston.defaultMeta})}),"createWinstonLogger");export{b as AzureApplicationInsightsLogger,u as ITelemetryFilterV2,m as ITelemetryFilterV3,E as createWinstonLogger};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../src/winston-azure-application-insights.ts","../src/helpers.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { TelemetryClient as TelemetryClientV2 } from 'applicationinsightsv2';\nimport type { SeverityLevel as KnownSeverityLevelV2, TraceTelemetry as TraceTelemetryV2 } from 'applicationinsightsv2/out/Declarations/Contracts';\nimport type { ExceptionTelemetry, KnownSeverityLevel as KnownSeverityLevelV3, TelemetryClient as TelemetryClientV3, TraceTelemetry as TraceTelemetryV3 } from 'applicationinsightsv3';\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 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 | {\n version: 2;\n client: TelemetryClientV2;\n filters?: ITelemetryFilterV2[];\n }\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 {\n return true;\n }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV3): boolean {\n return true;\n }\n}\nexport abstract class ITelemetryFilterV2 {\n public filterTrace(trace: TraceTelemetryV2, client: TelemetryClientV2): boolean {\n return true;\n }\n public filterException(trace: ExceptionTelemetry, client: TelemetryClientV2): boolean {\n 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 public get client(): TelemetryClientV3 | TelemetryClientV2 {\n return this.options.client;\n }\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\ntype JsonValue = string | number | JsonObject | JsonValue[] | null;\ntype JsonObject = {\n [key: string]: JsonValue;\n};\n\nexport type CreateWinstonLoggerOptions = {\n insights: AzureApplicationInsightsLoggerOptions;\n winston: {\n defaultMeta?: JsonObject;\n console: boolean;\n format?: Format[];\n };\n};\n\nexport const createWinstonLogger = (options: CreateWinstonLoggerOptions) => {\n const _transports: TransportStream[] = [new AzureApplicationInsightsLogger(options.insights)];\n\n if (options.winston.console) {\n _transports.push(\n new transports.Console({\n format: format.json(),\n stderrLevels: ['error', 'crit', 'alert', 'emerg'],\n consoleWarnLevels: ['warn', 'warning'],\n }),\n );\n }\n\n const _format = format.combine(...(options.winston.format ?? []), format.json());\n\n return createLogger({\n format: _format,\n transports: _transports,\n defaultMeta: options.winston.defaultMeta,\n });\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shellicar/winston-azure-application-insights",
3
- "version": "5.0.2",
3
+ "version": "5.0.4",
4
4
  "private": false,
5
5
  "description": "Azure Application Insights transport for Winston",
6
6
  "files": [
@@ -79,6 +79,7 @@
79
79
  "scripts": {
80
80
  "demo": "tsx demo.ts",
81
81
  "build": "tsup-node",
82
+ "watch": "tsup-node --watch",
82
83
  "lint": "biome lint",
83
84
  "format": "biome format",
84
85
  "check": "biome check",