@loglayer/transport
Version:
Base transport used to implement logging transports for loglayer.
213 lines (209 loc) • 6.48 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
let _loglayer_shared = require("@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 (_loglayer_shared.LogLevelPriority[params.logLevel] < _loglayer_shared.LogLevelPriority[this.level]) return;
const messages = this.shipToLogger(params);
if (this.consoleDebug) switch (params.logLevel) {
case _loglayer_shared.LogLevel.info:
console.info(...messages);
break;
case _loglayer_shared.LogLevel.warn:
console.warn(...messages);
break;
case _loglayer_shared.LogLevel.error:
console.error(...messages);
break;
case _loglayer_shared.LogLevel.trace:
console.debug(...messages);
break;
case _loglayer_shared.LogLevel.debug:
console.debug(...messages);
break;
case _loglayer_shared.LogLevel.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 (_loglayer_shared.LogLevelPriority[params.logLevel] < _loglayer_shared.LogLevelPriority[this.level]) return;
const messages = this.shipToLogger(params);
if (this.consoleDebug) switch (params.logLevel) {
case _loglayer_shared.LogLevel.info:
console.info(...messages);
break;
case _loglayer_shared.LogLevel.warn:
console.warn(...messages);
break;
case _loglayer_shared.LogLevel.error:
console.error(...messages);
break;
case _loglayer_shared.LogLevel.trace:
console.debug(...messages);
break;
case _loglayer_shared.LogLevel.debug:
console.debug(...messages);
break;
case _loglayer_shared.LogLevel.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
exports.BaseTransport = BaseTransport;
Object.defineProperty(exports, 'LogLevel', {
enumerable: true,
get: function () {
return _loglayer_shared.LogLevel;
}
});
Object.defineProperty(exports, 'LogLevelPriority', {
enumerable: true,
get: function () {
return _loglayer_shared.LogLevelPriority;
}
});
exports.LoggerlessTransport = LoggerlessTransport;
exports.testTransportOutput = testTransportOutput;