UNPKG

@loglayer/transport

Version:

Base transport used to implement logging transports for loglayer.

198 lines (194 loc) 5.87 kB
import { LogLevel, LogLevel as LogLevel$1, LogLevelPriority } from "@loglayer/shared"; //#region src/BaseTransport.ts /** * For implementing libraries that are logging libraries that generally have an interface of: * info(), warn(), error(), debug(), trace(), etc. * * @see {@link https://loglayer.dev/transports/creating-transports.html | Creating Transports} */ var BaseTransport = class { /** * An identifier for the transport. If not defined, a random one will be generated. */ id; /** * Instance of the logger library */ logger; /** * If false, the transport will not send logs to the logger. */ enabled; /** * If true, the transport will log to the console for debugging purposes */ consoleDebug; /** * Minimum log level to process. Defaults to "trace". */ level; constructor(config) { this.id = config.id ?? Date.now().toString() + Math.random().toString(); this.logger = config.logger; this.enabled = config.enabled ?? true; this.consoleDebug = config.consoleDebug ?? false; this.level = config.level ?? "trace"; } /** * LogLayer calls this to send logs to the transport */ _sendToLogger(params) { if (!this.enabled) return; if (LogLevelPriority[params.logLevel] < LogLevelPriority[this.level]) return; const messages = this.shipToLogger(params); if (this.consoleDebug) switch (params.logLevel) { case LogLevel$1.info: console.info(...messages); break; case LogLevel$1.warn: console.warn(...messages); break; case LogLevel$1.error: console.error(...messages); break; case LogLevel$1.trace: console.debug(...messages); break; case LogLevel$1.debug: console.debug(...messages); break; case LogLevel$1.fatal: console.debug(...messages); break; default: console.log(...messages); } } /** * Returns the logger instance attached to the transport */ getLoggerInstance() { return this.logger; } }; //#endregion //#region src/LoggerlessTransport.ts /** * For implementing libraries that aren't logging libraries * * @see {@link https://loglayer.dev/transports/creating-transports.html | Creating Transports} */ var LoggerlessTransport = class { /** * An identifier for the transport. If not defined, a random one will be generated. */ id; /** * If false, the transport will not send logs to the logger. */ enabled; /** * Minimum log level to process. Defaults to "trace". */ level; /** * If true, the transport will log to the console for debugging purposes */ consoleDebug; constructor(config) { this.id = Date.now().toString() + Math.random().toString(); this.enabled = config.enabled ?? true; this.consoleDebug = config.consoleDebug ?? false; this.level = config.level ?? "trace"; } /** * LogLayer calls this to send logs to the transport */ _sendToLogger(params) { if (!this.enabled) return; if (LogLevelPriority[params.logLevel] < LogLevelPriority[this.level]) return; const messages = this.shipToLogger(params); if (this.consoleDebug) switch (params.logLevel) { case LogLevel$1.info: console.info(...messages); break; case LogLevel$1.warn: console.warn(...messages); break; case LogLevel$1.error: console.error(...messages); break; case LogLevel$1.trace: console.debug(...messages); break; case LogLevel$1.debug: console.debug(...messages); break; case LogLevel$1.fatal: console.debug(...messages); break; default: console.log(...messages); } } /** * Returns the logger instance attached to the transport */ getLoggerInstance() { throw new Error("This transport does not have a logger instance"); } }; //#endregion //#region src/test-utils.ts /** * Shows what the logging library output looks like under a transport * @param label A name for the test * @param logLayerInstance The loglayer instance to use for logging */ function testTransportOutput(label, logLayerInstance) { console.log(`\n===== Start Livetest for: ${label} =====`); console.log("\n===== info() ===="); logLayerInstance.info("info message"); console.log("\n===== warn() ===="); logLayerInstance.warn("warn message"); console.log("\n===== error() ===="); logLayerInstance.error("error message"); console.log("\n===== debug() ===="); logLayerInstance.debug("debug message"); console.log("\n===== trace() ===="); logLayerInstance.trace("trace message"); console.log("\n===== fatal() ===="); logLayerInstance.fatal("fatal message"); console.log("\n===== multiple parameters ===="); logLayerInstance.info("multiple info message", "with multiple", "parameters"); console.log("\n===== multiple parameters with mixed data ===="); logLayerInstance.info("mixed data", 1234, void 0, null, true); console.log("\n===== withMetadata() ===="); logLayerInstance.withMetadata({ test: "metadata", test2: "metadata2" }).trace("trace message with metadata"); console.log("\n===== withError() ===="); logLayerInstance.withError(/* @__PURE__ */ new Error("error object")).trace("trace message with error"); console.log("\n===== withError() + withMetadata() ===="); logLayerInstance.withMetadata({ test: "metadata", test2: "metadata2", nested: { data: "nested data" } }).withError(/* @__PURE__ */ new Error("error object")).error("error message with metadata and error instance"); console.log("\n===== onlyError() ===="); logLayerInstance.errorOnly(/* @__PURE__ */ new Error("error message")); console.log("\n===== onlyMetadata() ===="); logLayerInstance.metadataOnly({ only: "metadata", arrayData: [ 1, 2, 3 ] }); console.log("\n===== withContext() ===="); logLayerInstance.withContext({ test: "data" }); logLayerInstance.info("context data"); console.log(`\n===== End Livetest for: ${label} =====`); } //#endregion export { BaseTransport, LogLevel, LogLevelPriority, LoggerlessTransport, testTransportOutput };