Skip to content

Commit e71fe11

Browse files
committed
dev: add toggle logging, and fix issues in logger
1 parent b0cbcdf commit e71fe11

File tree

3 files changed

+89
-8
lines changed

3 files changed

+89
-8
lines changed

src/putility/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ module.exports = {
3030
promise: require('./src/libs/promise'),
3131
context: require('./src/libs/context'),
3232
listener: require('./src/libs/listener'),
33+
log: require('./src/libs/log'),
3334
},
3435
concepts: {
3536
Service,

src/putility/src/libs/log.js

+81-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const { AdvancedBase } = require("../..");
2-
const { TLogger } = require("../traits/traits");
1+
const { AdvancedBase } = require("../AdvancedBase");
2+
const { TLogger, AS } = require("../traits/traits");
33

44
class ArrayLogger extends AdvancedBase {
55
static PROPERTIES = {
@@ -16,9 +16,71 @@ class ArrayLogger extends AdvancedBase {
1616
}
1717
}
1818

19+
class CategorizedToggleLogger extends AdvancedBase {
20+
static PROPERTIES = {
21+
categories: {
22+
description: 'categories that are enabled',
23+
factory: () => ({})
24+
},
25+
delegate: {
26+
construct: true,
27+
value: null,
28+
adapt: v => AS(v, TLogger),
29+
}
30+
}
31+
static IMPLEMENTS = {
32+
[TLogger]: {
33+
log (level, message, fields, values) {
34+
const category = fields.category;
35+
if ( ! this.categories[category] ) return;
36+
return this.delegate.log(level, message, fields, values);
37+
}
38+
}
39+
}
40+
on (category) {
41+
this.categories[category] = true;
42+
}
43+
off (category) {
44+
delete this.categories[category];
45+
}
46+
}
47+
48+
class ToggleLogger extends AdvancedBase {
49+
static PROPERTIES = {
50+
enabled: {
51+
construct: true,
52+
value: true
53+
},
54+
delegate: {
55+
construct: true,
56+
value: null,
57+
adapt: v => AS(v, TLogger),
58+
}
59+
}
60+
static IMPLEMENTS = {
61+
[TLogger]: {
62+
log (level, message, fields, values) {
63+
if ( ! this.enabled) return;
64+
return this.delegate.log(level, message, fields, values);
65+
}
66+
}
67+
}
68+
}
69+
1970
class ConsoleLogger extends AdvancedBase {
2071
static MODULES = {
21-
util: require('util'),
72+
// This would be cool, if it worked in a browser.
73+
// util: require('util'),
74+
75+
util: {
76+
inspect: v => {
77+
if (typeof v === 'string') return v;
78+
try {
79+
return JSON.stringify(v);
80+
} catch (e) {}
81+
return '' + v;
82+
}
83+
}
2284
}
2385
static PROPERTIES = {
2486
console: {
@@ -67,7 +129,7 @@ class ConsoleLogger extends AdvancedBase {
67129
.join(' ');
68130
}
69131

70-
this.console[l.err ? 'error' : 'log'](str);
132+
(this.console ?? console)[l.err ? 'error' : 'log'](str);
71133
}
72134
}
73135
}
@@ -81,7 +143,8 @@ class FieldsLogger extends AdvancedBase {
81143
},
82144
delegate: {
83145
construct: true,
84-
value: null
146+
value: null,
147+
adapt: v => AS(v, TLogger),
85148
}
86149
}
87150

@@ -104,9 +167,10 @@ class LoggerFacade extends AdvancedBase {
104167
value: () => {
105168
return new ConsoleLogger();
106169
},
107-
adapt: v => {
108-
return v.as(TLogger);
109-
},
170+
adapt: v => AS(v, TLogger),
171+
construct: true,
172+
},
173+
cat: {
110174
construct: true,
111175
},
112176
}
@@ -132,10 +196,19 @@ class LoggerFacade extends AdvancedBase {
132196
info (message, ...values) {
133197
this.impl.log('info', message, {}, values);
134198
}
199+
200+
on (category) {
201+
this.cat.on(category);
202+
}
203+
off (category) {
204+
this.cat.off(category);
205+
}
135206
}
136207

137208
module.exports = {
138209
ArrayLogger,
210+
CategorizedToggleLogger,
211+
ToggleLogger,
139212
ConsoleLogger,
140213
FieldsLogger,
141214
LoggerFacade,

src/putility/src/traits/traits.js

+7
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,11 @@ module.exports = {
22
TTopics: Symbol('TTopics'),
33
TDetachable: Symbol('TDetachable'),
44
TLogger: Symbol('TLogger'),
5+
6+
AS: (obj, trait) => {
7+
if ( obj.constructor && obj.constructor.IMPLEMENTS && obj.constructor.IMPLEMENTS[trait] ) {
8+
return obj.as(trait);
9+
}
10+
return obj;
11+
}
512
};

0 commit comments

Comments
 (0)