1
- const { AdvancedBase } = require ( "../.. " ) ;
2
- const { TLogger } = require ( "../traits/traits" ) ;
1
+ const { AdvancedBase } = require ( "../AdvancedBase " ) ;
2
+ const { TLogger, AS } = require ( "../traits/traits" ) ;
3
3
4
4
class ArrayLogger extends AdvancedBase {
5
5
static PROPERTIES = {
@@ -16,9 +16,71 @@ class ArrayLogger extends AdvancedBase {
16
16
}
17
17
}
18
18
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
+
19
70
class ConsoleLogger extends AdvancedBase {
20
71
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
+ }
22
84
}
23
85
static PROPERTIES = {
24
86
console : {
@@ -67,7 +129,7 @@ class ConsoleLogger extends AdvancedBase {
67
129
. join ( ' ' ) ;
68
130
}
69
131
70
- this . console [ l . err ? 'error' : 'log' ] ( str ) ;
132
+ ( this . console ?? console ) [ l . err ? 'error' : 'log' ] ( str ) ;
71
133
}
72
134
}
73
135
}
@@ -81,7 +143,8 @@ class FieldsLogger extends AdvancedBase {
81
143
} ,
82
144
delegate : {
83
145
construct : true ,
84
- value : null
146
+ value : null ,
147
+ adapt : v => AS ( v , TLogger ) ,
85
148
}
86
149
}
87
150
@@ -104,9 +167,10 @@ class LoggerFacade extends AdvancedBase {
104
167
value : ( ) => {
105
168
return new ConsoleLogger ( ) ;
106
169
} ,
107
- adapt : v => {
108
- return v . as ( TLogger ) ;
109
- } ,
170
+ adapt : v => AS ( v , TLogger ) ,
171
+ construct : true ,
172
+ } ,
173
+ cat : {
110
174
construct : true ,
111
175
} ,
112
176
}
@@ -132,10 +196,19 @@ class LoggerFacade extends AdvancedBase {
132
196
info ( message , ...values ) {
133
197
this . impl . log ( 'info' , message , { } , values ) ;
134
198
}
199
+
200
+ on ( category ) {
201
+ this . cat . on ( category ) ;
202
+ }
203
+ off ( category ) {
204
+ this . cat . off ( category ) ;
205
+ }
135
206
}
136
207
137
208
module . exports = {
138
209
ArrayLogger,
210
+ CategorizedToggleLogger,
211
+ ToggleLogger,
139
212
ConsoleLogger,
140
213
FieldsLogger,
141
214
LoggerFacade,
0 commit comments