UNPKG

@push.rocks/smartlog

Version:

A minimalistic, distributed, and extensible logging tool supporting centralized log management.

123 lines 9.15 kB
import * as plugins from './smartlog.plugins.js'; import { LogRouter } from './smartlog.classes.logrouter.js'; import { LogGroup } from './smartlog.classes.loggroup.js'; export class Smartlog { // STATIC static createForCommitinfo(commitinfo) { return new Smartlog({ logContext: { commitinfo, }, }); } addLogDestination(logDestinationArg) { this.logRouter.addLogDestination(logDestinationArg); } constructor(optionsArg) { this.uniInstanceId = plugins.isounique.uni(); this.consoleEnabled = false; this.logRouter = new LogRouter(); this.logContext = optionsArg.logContext; this.minimumLogLevel = optionsArg.minimumLogLevel || 'silly'; } // ============ // Logger Setup // ============ /** * enables console logging */ enableConsole(optionsArg) { if (globalThis.process && optionsArg && optionsArg.captureAll) { const process = globalThis.process; const originalStdoutWrite = process.stdout.write.bind(process.stdout); const originalStderrWrite = process.stderr.write.bind(process.stderr); process.stdout.write = ((...args) => { const logString = args[0]; if (!logString || typeof logString !== 'string') { // continue as planned return originalStdoutWrite(...args); } if (!logString.startsWith('LOG')) { if (logString.includes('Error:')) { this.log('error', logString); } else { this.log('info', logString); } return true; } return originalStdoutWrite(...args); }); process.stderr.write = ((...args) => { const logString = args[0]; if (!logString || typeof logString !== 'string' || !logString.startsWith('LOG')) { this.log('error', logString); return true; } return originalStderrWrite(...args); }); } this.consoleEnabled = true; } // ============= // log functions // ============= /** * main log method * @param logLevelArg - the log level * @param logMessageArg - the log message * @param logDataArg - any additional log data * @param correlationArg - info about corrleations */ async log(logLevelArg, logMessageArg, logDataArg, correlationArg) { correlationArg = { ...{ id: plugins.isounique.uni(), type: 'none', instance: this.uniInstanceId, }, ...correlationArg, }; if (this.consoleEnabled) { this.safeConsoleLog(`${logLevelArg}: ${logMessageArg}`); } const logPackage = { timestamp: Date.now(), type: 'log', context: this.logContext, level: logLevelArg, correlation: correlationArg, message: logMessageArg, }; if (logDataArg) { logPackage.data = logDataArg; } await this.logRouter.routeLog(logPackage); } increment(logLevelArg, logMessageArg, logDataArg, correlationArg = { id: plugins.isounique.uni(), type: 'none', }) { if (this.consoleEnabled) { this.safeConsoleLog(`INCREMENT: ${logLevelArg}: ${logMessageArg}`); } this.logRouter.routeLog({ timestamp: Date.now(), type: 'increment', context: this.logContext, level: logLevelArg, message: logMessageArg, correlation: correlationArg, }); } async handleLog(logPackageArg) { await this.logRouter.routeLog(logPackageArg); } safeConsoleLog(logLine) { console.log(`LOG => ${new Date().getHours()}:${new Date().getMinutes()}:${new Date().getSeconds()} => ${logLine}`); } createLogGroup(transactionId = 'none') { return new LogGroup(this, transactionId); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRsb2cuY2xhc3Nlcy5zbWFydGxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bG9nLmNsYXNzZXMuc21hcnRsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDRixNQUFNLENBQUMsbUJBQW1CLENBQy9CLFVBQWdFO1FBRWhFLE9BQU8sSUFBSSxRQUFRLENBQUM7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLFVBQVU7YUFDWDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFZTSxpQkFBaUIsQ0FBQyxpQkFBNkQ7UUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLFVBQXNDO1FBVjNDLGtCQUFhLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUvQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQU9sQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQztJQUMvRCxDQUFDO0lBRUQsZUFBZTtJQUNmLGVBQWU7SUFDZixlQUFlO0lBRWY7O09BRUc7SUFDSSxhQUFhLENBQUMsVUFBb0M7UUFDdkQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxD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