@push.rocks/smartlog
Version:
A minimalistic, distributed, and extensible logging tool supporting centralized log management.
122 lines • 9.04 kB
JavaScript
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.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRsb2cuY2xhc3Nlcy5zbWFydGxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bG9nLmNsYXNzZXMuc21hcnRsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDRixNQUFNLENBQUMsbUJBQW1CLENBQy9CLFVBQWdFO1FBRWhFLE9BQU8sSUFBSSxRQUFRLENBQUM7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLFVBQVU7YUFDWDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFZTSxpQkFBaUIsQ0FBQyxpQkFBNkQ7UUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLFVBQXNDO1FBVjNDLGtCQUFhLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUkvQyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQU9sQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQztJQUMvRCxDQUFDO0lBRUQsZUFBZTtJQUNmLGVBQWU7SUFDZixlQUFlO0lBRWY7O09BRUc7SUFDSSxhQUFhLENBQUMsVUFBb0M7UUFDdkQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxNQUFNLG1C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