@@ -39,6 +39,16 @@ export const enum Level {
39
39
DEBUG = 3 ,
40
40
}
41
41
42
+ export namespace Logger {
43
+ export interface Options {
44
+ name : string
45
+ meta ?: Partial < Message >
46
+ level ?: Level
47
+ }
48
+ }
49
+
50
+ export interface Logger extends Logger . Options { }
51
+
42
52
export class Logger {
43
53
static color ( exporter : Exporter , code : number , value : any , decoration = '' ) {
44
54
if ( ! exporter . colors ) return '' + value
@@ -55,7 +65,8 @@ export class Logger {
55
65
return colors [ Math . abs ( hash ) % colors . length ]
56
66
}
57
67
58
- constructor ( public name : string , private _meta : any , private _factory : Factory ) {
68
+ constructor ( options : Logger . Options , private factory : Factory ) {
69
+ Object . assign ( this , options )
59
70
this . success = this . _method ( 'success' , Level . SUCCESS )
60
71
this . error = this . _method ( 'error' , Level . ERROR )
61
72
this . info = this . _method ( 'info' , Level . INFO )
@@ -74,13 +85,13 @@ export class Logger {
74
85
}
75
86
}
76
87
77
- const sn = ++ this . _factory . _snMessage
88
+ const sn = ++ this . factory . _snMessage
78
89
const ts = Date . now ( )
79
- for ( const exporter of this . _factory . exporters . values ( ) ) {
80
- const targetLevel = exporter . levels ?. [ this . name ] ?? exporter . levels ?. default ?? Level . INFO
90
+ for ( const exporter of this . factory . exporters . values ( ) ) {
91
+ const targetLevel = exporter . levels ?. [ this . name ] ?? exporter . levels ?. default ?? this . level ?? Level . INFO
81
92
if ( targetLevel < level ) continue
82
93
const body = this . _format ( exporter , args . slice ( ) )
83
- const message : Message = { ... this . _meta , sn, ts, type, level, name : this . name , body }
94
+ const message : Message = { sn, ts, type, level, name : this . name , ... this . meta , body }
84
95
exporter . export ( message )
85
96
}
86
97
}
@@ -97,7 +108,7 @@ export class Logger {
97
108
let format : string = args . shift ( )
98
109
format = format . replace ( / % ( [ a - z A - Z % ] ) / g, ( match , char ) => {
99
110
if ( match === '%%' ) return '%'
100
- const formatter = this . _factory . formatters [ char ]
111
+ const formatter = this . factory . formatters [ char ]
101
112
if ( typeof formatter === 'function' ) {
102
113
const value = args . shift ( )
103
114
return formatter ( value , exporter , this )
@@ -107,7 +118,7 @@ export class Logger {
107
118
108
119
for ( let arg of args ) {
109
120
if ( typeof arg === 'object' && arg ) {
110
- arg = this . _factory . formatters [ 'o' ] ( arg , exporter , this )
121
+ arg = this . factory . formatters [ 'o' ] ( arg , exporter , this )
111
122
}
112
123
format += ' ' + arg
113
124
}
@@ -134,8 +145,8 @@ export class Factory {
134
145
exporters = new Map < number , Exporter > ( )
135
146
formatters = Object . create ( Factory . formatters )
136
147
137
- createLogger ( name : string , meta : any = { } ) {
138
- return new Logger ( name , meta , this )
148
+ createLogger ( name : string , options : Omit < Logger . Options , 'name' > = { } ) {
149
+ return new Logger ( { name, ... options } , this )
139
150
}
140
151
141
152
addExporter ( exporter : Exporter ) {
0 commit comments