@@ -92,39 +92,74 @@ function getBufferedLogger(categoryName) {
92
92
return logger ;
93
93
}
94
94
95
+ function normalizeCategory ( category ) {
96
+ return category + '.' ;
97
+ }
98
+
99
+ function doesLevelEntryContainsLogger ( levelCategory , loggerCategory ) {
100
+ var normalizedLevelCategory = normalizeCategory ( levelCategory ) ;
101
+ var normalizedLoggerCategory = normalizeCategory ( loggerCategory ) ;
102
+ <
6DB6
span class=pl-k>return normalizedLoggerCategory . substring ( 0 , normalizedLevelCategory . length ) == normalizedLevelCategory ;
103
+ }
104
+
105
+ function doesAppenderContainsLogger ( appenderCategory , loggerCategory ) {
106
+ var normalizedAppenderCategory = normalizeCategory ( appenderCategory ) ;
107
+ var normalizedLoggerCategory = normalizeCategory ( loggerCategory ) ;
108
+ return normalizedLoggerCategory . substring ( 0 , normalizedAppenderCategory . length ) == normalizedAppenderCategory ;
109
+ }
110
+
95
111
96
112
/**
97
113
* Get a logger instance. Instance is cached on categoryName level.
98
114
* @param {String } categoryName name of category to log to.
99
115
* @return {Logger } instance of logger for the category
100
116
* @static
101
117
*/
102
- function getLogger ( categoryName ) {
118
+ function getLogger ( loggerCategoryName ) {
103
119
104
120
// Use default logger if categoryName is not specified or invalid
105
- if ( typeof categoryName !== "string" ) {
106
- categoryName = Logger . DEFAULT_CATEGORY ;
121
+ if ( typeof loggerCategoryName !== "string" ) {
122
+ loggerCategoryName = Logger . DEFAULT_CATEGORY ;
107
123
}
108
124
109
- var appenderList ;
110
- if ( ! hasLogger ( categoryName ) ) {
125
+ if ( ! hasLogger ( loggerCategoryName ) ) {
126
+
127
+ var level = undefined ;
128
+
129
+ // If there's a "levels" entry in the configuration
130
+ if ( levels . config ) {
131
+ // Goes through the categories in the levels configuration entry, starting by the "higher" ones.
132
+ var keys = Object . keys ( levels . config ) . sort ( ) ;
133
+ for ( var idx = 0 ; idx < keys . length ; idx ++ ) {
134
+ var levelCategory = keys [ idx ] ;
135
+ if ( doesLevelEntryContainsLogger ( levelCategory , loggerCategoryName ) ) {
136
+ // level for the logger
137
+ level = levels . config [ levelCategory ] ;
138
+ }
139
+ }
140
+ }
141
+
111
142
// Create the logger for this name if it doesn't already exist
112
- loggers [ categoryName ] = new Logger ( categoryName ) ;
113
- if ( appenders [ categoryName ] ) {
114
- appenderList = appenders [ categoryName ] ;
115
- appenderList . forEach ( function ( appender ) {
116
- loggers [ categoryName ] . addListener ( "log" , appender ) ;
117
- } ) ;
143
+ loggers [ loggerCategoryName ] = new Logger ( loggerCategoryName , level ) ;
144
+
145
+ var appenderList ;
146
+ for ( var appenderCategory in appenders ) {
147
+ if ( doesAppenderContainsLogger ( appenderCategory , loggerCategoryName ) ) {
148
+ appenderList = appenders [ appenderCategory ] ;
149
+ appenderList . forEach ( function ( appender ) {
150
+ loggers [ loggerCategoryName ] . addListener ( "log" , appender ) ;
151
+ } ) ;
152
+ }
118
153
}
119
154
if ( appenders [ ALL_CATEGORIES ] ) {
120
155
appenderList = appenders [ ALL_CATEGORIES ] ;
121
156
appenderList . forEach ( function ( appender ) {
122
- loggers [ categoryName ] . addListener ( "log" , appender ) ;
157
+ loggers [ loggerCategoryName ] . addListener ( "log" , appender ) ;
123
158
} ) ;
124
159
}
125
160
}
126
161
127
- return loggers [ categoryName ] ;
162
+ return loggers [ loggerCategoryName ] ;
128
163
}
129
164
130
165
/**
@@ -141,13 +176,19 @@ function addAppender () {
141
176
args = args [ 0 ] ;
142
177
}
143
178
144
- args . forEach ( function ( category ) {
145
- addAppenderToCategory ( appender , category ) ;
179
+ args . forEach ( function ( appenderCategory ) {
180
+ addAppenderToCategory ( appender , appenderCategory ) ;
146
181
147
- if ( category === ALL_CATEGORIES ) {
1
10000
82
+ if ( appenderCategory === ALL_CATEGORIES ) {
148
183
addAppenderToAllLoggers ( appender ) ;
149
- } else if ( hasLogger ( category ) ) {
150
- loggers [ category ] . addListener ( "log" , appender ) ;
184
+ } else {
185
+
186
+ for ( var loggerCategory in loggers ) {
187
+ if ( doesAppenderContainsLogger ( appenderCategory , loggerCategory ) ) {
188
+ loggers [ loggerCategory ] . addListener ( "log" , appender ) ;
189
+ }
190
+ }
191
+
151
192
}
152
193
} ) ;
153
194
}
@@ -193,14 +234,19 @@ function configureAppenders(appenderList, options) {
193
234
}
194
235
}
195
236
196
- function configureLevels ( levels ) {
197
- if ( levels ) {
198
- for ( var category in levels ) {
199
- if ( levels . hasOwnProperty ( category ) ) {
237
+ function configureLevels ( _levels ) {
238
+ levels . config = _levels ; // Keep it so we can create loggers later using this cfg
239
+ if ( _levels ) {
240
+ var keys = Object . keys ( levels . config ) . sort ( ) ;
241
+ for ( var idx in keys ) {
242
+ var category = keys [ idx ] ;
243
+ for ( var loggerCategory in loggers ) {
244
+ if ( doesLevelEntryContainsLogger ( category , loggerCategory ) ) {
245
+ loggers [ loggerCategory ] . setLevel ( _levels [ category ] ) ;
246
+ }
200
247
if ( category === ALL_CATEGORIES ) {
201
248
setGlobalLogLevel ( levels [ category ] ) ;
202
- }
203
- getLogger ( category ) . setLevel ( levels [ category ] ) ;
249
+ }
204
250
}
205
251
}
206
252
}
@@ -231,8 +277,8 @@ function loadConfigurationFile(filename) {
231
277
function configureOnceOff ( config , options ) {
232
278
if ( config ) {
233
279
try {
234
- configureAppenders ( config . appenders , options ) ;
235
280
configureLevels ( config . levels ) ;
281
+ configureAppenders ( config . appenders , options ) ;
236
282
237
283
if ( config . replaceConsole ) {
238
284
replaceConsole ( ) ;
0 commit comments