UNPKG

@bitrix24/b24jssdk

Version:

Bitrix24 REST API JavaScript SDK

1 lines 3.79 kB
{"version":3,"file":"logger.mjs","sources":["../../../src/logger/logger.ts"],"sourcesContent":["import type { Handler, Processor, LogRecord, LogLevelName, LoggerInterface } from '../types/logger'\nimport { LogLevel } from '../types/logger'\nimport { AbstractLogger } from './abstract-logger'\n\n/**\n * A logger created according to the principles of `Monolog`\n *\n * @link https://github.com/Seldaek/monolog\n */\nexport class Logger extends AbstractLogger implements LoggerInterface {\n private readonly channel: string\n private handlers: Handler[] = []\n private processors: Processor[] = []\n\n constructor(channel: string) {\n super()\n this.channel = channel\n }\n\n // region static methods for creation ////\n static create(channel: string): Logger {\n return new Logger(channel)\n }\n // endregion ////\n\n // region config ////\n public pushHandler(handler: Handler): this {\n this.handlers.push(handler)\n return this\n }\n\n public popHandler(): Handler | null {\n return this.handlers.pop() || null\n }\n\n public setHandlers(handlers: Handler[]): this {\n this.handlers = handlers\n return this\n }\n\n public pushProcessor(processor: Processor): this {\n this.processors.push(processor)\n return this\n }\n // endregion ////\n\n /**\n * @inheritDoc\n */\n public async log(level: LogLevel, message: string, context?: Record<string, any>): Promise<void> {\n const record: LogRecord = {\n channel: this.channel,\n level,\n levelName: LogLevel[level] as LogLevelName,\n message,\n context: context ?? {},\n extra: {},\n timestamp: new Date()\n }\n\n // Using processors\n let processedRecord = record\n for (const processor of this.processors) {\n processedRecord = processor(processedRecord)\n }\n\n // Pass the record to the handlers\n for (const handler of this.handlers) {\n if (handler.isHandling(level)) {\n // The handler returns a boolean indicating whether it was processed successfully.\n const handled = await handler.handle(processedRecord)\n\n // If the handler has processed the record and should NOT proceed further (bubble: false)\n // break the chain of handlers\n if (handled && !handler.shouldBubble()) {\n break\n }\n }\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AASO,MAAM,eAAe,cAAA,CAA0C;AAAA,EATtE;AASsE,IAAA,MAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AAAA,EACnD,OAAA;AAAA,EACT,WAAsB,EAAC;AAAA,EACvB,aAA0B,EAAC;AAAA,EAEnC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA,EAGA,OAAO,OAAO,OAAA,EAAyB;AACrC,IAAA,OAAO,IAAI,OAAO,OAAO,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA,EAIO,YAAY,OAAA,EAAwB;AACzC,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,UAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAI,IAAK,IAAA;AAAA,EAChC;AAAA,EAEO,YAAY,QAAA,EAA2B;AAC5C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,cAAc,SAAA,EAA4B;AAC/C,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,SAAS,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAiB,OAAA,EAA8C;AAC/F,IAAA,MAAM,MAAA,GAAoB;AAAA,MACxB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAA;AAAA,MACA,SAAA,EAAW,SAAS,KAAK,CAAA;AAAA,MACzB,OAAA;AAAA,MACA,OAAA,EAAS,WAAW,EAAC;AAAA,MACrB,OAAO,EAAC;AAAA,MACR,SAAA,sBAAe,IAAA;AAAK,KACtB;AAGA,IAAA,IAAI,eAAA,GAAkB,MAAA;AACtB,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,eAAA,GAAkB,UAAU,eAAe,CAAA;AAAA,IAC7C;AAGA,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AAE7B,QAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,eAAe,CAAA;AAIpD,QAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,YAAA,EAAa,EAAG;AACtC,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;;"}