dev: add toggle logging, and fix issues in logger

This commit is contained in:
KernelDeimos
2024-11-05 15:31:17 -05:00
parent b0cbcdf743
commit e71fe11e32
3 changed files with 89 additions and 8 deletions
+1
View File
@@ -30,6 +30,7 @@ module.exports = {
promise: require('./src/libs/promise'),
context: require('./src/libs/context'),
listener: require('./src/libs/listener'),
log: require('./src/libs/log'),
},
concepts: {
Service,
+81 -8
View File
@@ -1,5 +1,5 @@
const { AdvancedBase } = require("../..");
const { TLogger } = require("../traits/traits");
const { AdvancedBase } = require("../AdvancedBase");
const { TLogger, AS } = require("../traits/traits");
class ArrayLogger extends AdvancedBase {
static PROPERTIES = {
@@ -16,9 +16,71 @@ class ArrayLogger extends AdvancedBase {
}
}
class CategorizedToggleLogger extends AdvancedBase {
static PROPERTIES = {
categories: {
description: 'categories that are enabled',
factory: () => ({})
},
delegate: {
construct: true,
value: null,
adapt: v => AS(v, TLogger),
}
}
static IMPLEMENTS = {
[TLogger]: {
log (level, message, fields, values) {
const category = fields.category;
if ( ! this.categories[category] ) return;
return this.delegate.log(level, message, fields, values);
}
}
}
on (category) {
this.categories[category] = true;
}
off (category) {
delete this.categories[category];
}
}
class ToggleLogger extends AdvancedBase {
static PROPERTIES = {
enabled: {
construct: true,
value: true
},
delegate: {
construct: true,
value: null,
adapt: v => AS(v, TLogger),
}
}
static IMPLEMENTS = {
[TLogger]: {
log (level, message, fields, values) {
if ( ! this.enabled) return;
return this.delegate.log(level, message, fields, values);
}
}
}
}
class ConsoleLogger extends AdvancedBase {
static MODULES = {
util: require('util'),
// This would be cool, if it worked in a browser.
// util: require('util'),
util: {
inspect: v => {
if (typeof v === 'string') return v;
try {
return JSON.stringify(v);
} catch (e) {}
return '' + v;
}
}
}
static PROPERTIES = {
console: {
@@ -67,7 +129,7 @@ class ConsoleLogger extends AdvancedBase {
.join(' ');
}
this.console[l.err ? 'error' : 'log'](str);
(this.console ?? console)[l.err ? 'error' : 'log'](str);
}
}
}
@@ -81,7 +143,8 @@ class FieldsLogger extends AdvancedBase {
},
delegate: {
construct: true,
value: null
value: null,
adapt: v => AS(v, TLogger),
}
}
@@ -104,9 +167,10 @@ class LoggerFacade extends AdvancedBase {
value: () => {
return new ConsoleLogger();
},
adapt: v => {
return v.as(TLogger);
},
adapt: v => AS(v, TLogger),
construct: true,
},
cat: {
construct: true,
},
}
@@ -132,10 +196,19 @@ class LoggerFacade extends AdvancedBase {
info (message, ...values) {
this.impl.log('info', message, {}, values);
}
on (category) {
this.cat.on(category);
}
off (category) {
this.cat.off(category);
}
}
module.exports = {
ArrayLogger,
CategorizedToggleLogger,
ToggleLogger,
ConsoleLogger,
FieldsLogger,
LoggerFacade,
+7
View File
@@ -2,4 +2,11 @@ module.exports = {
TTopics: Symbol('TTopics'),
TDetachable: Symbol('TDetachable'),
TLogger: Symbol('TLogger'),
AS: (obj, trait) => {
if ( obj.constructor && obj.constructor.IMPLEMENTS && obj.constructor.IMPLEMENTS[trait] ) {
return obj.as(trait);
}
return obj;
}
};