@@ -10,6 +10,8 @@ import 'package:logging/logging.dart';
1010import 'package:test/test.dart' ;
1111
1212void main () {
13+ final hierarchicalLoggingEnabledDefault = hierarchicalLoggingEnabled;
14+
1315 test ('level comparison is a valid comparator' , () {
1416 var level1 = const Level ('NOT_REAL1' , 253 );
1517 expect (level1 == level1, isTrue);
@@ -213,6 +215,11 @@ void main() {
213215 });
214216
215217 group ('detached loggers' , () {
218+ tearDown (() {
219+ hierarchicalLoggingEnabled = hierarchicalLoggingEnabledDefault;
220+ Logger .root.level = defaultLevel;
221+ });
222+
216223 test ('create new instances of Logger' , () {
217224 var a1 = Logger .detached ('a' );
218225 var a2 = Logger .detached ('a' );
@@ -232,6 +239,51 @@ void main() {
232239 var a = Logger .detached ('a' );
233240 expect (a.children, {});
234241 });
242+
243+ test ('have levels independent of the root level' , () {
244+ void testDetachedLoggerLevel (bool withHierarchy) {
245+ hierarchicalLoggingEnabled = withHierarchy;
246+
247+ const newRootLevel = Level .ALL ;
248+ const newDetachedLevel = Level .OFF ;
249+
250+ Logger .root.level = newRootLevel;
251+
252+ final detached = Logger .detached ('a' );
253+ expect (detached.level, defaultLevel);
254+ expect (Logger .root.level, newRootLevel);
255+
256+ detached.level = newDetachedLevel;
257+ expect (detached.level, newDetachedLevel);
258+ expect (Logger .root.level, newRootLevel);
259+ }
260+
261+ testDetachedLoggerLevel (false );
262+ testDetachedLoggerLevel (true );
263+ });
264+
265+ test ('log messages regardless of hierarchy' , () {
266+ void testDetachedLoggerOnRecord (bool withHierarchy) {
267+ var calls = 0 ;
268+ void handler (_) => calls += 1 ;
269+
270+ hierarchicalLoggingEnabled = withHierarchy;
271+
272+ final detached = Logger .detached ('a' );
273+ detached.level = Level .ALL ;
274+ detached.onRecord.listen (handler);
275+
276+ Logger .root.info ('foo' );
277+ expect (calls, 0 );
278+
279+ detached.info ('foo' );
280+ detached.info ('foo' );
281+ expect (calls, 2 );
282+ }
283+
284+ testDetachedLoggerOnRecord (false );
285+ testDetachedLoggerOnRecord (true );
286+ });
235287 });
236288
237289 group ('mutating levels' , () {
@@ -294,6 +346,16 @@ void main() {
294346 expect (c.level, equals (Level .FINE ));
295347 });
296348
349+ test ('loggers effective level - with changing hierarchy' , () {
350+ hierarchicalLoggingEnabled = true ;
351+ d.level = Level .SHOUT ;
352+ hierarchicalLoggingEnabled = false ;
353+
354+ expect (root.level, Level .INFO );
355+ expect (d.level, root.level);
356+ expect (e.level, root.level);
357+ });
358+
297359 test ('isLoggable is appropriate' , () {
298360 hierarchicalLoggingEnabled = true ;
299361 root.level = Level .SEVERE ;
0 commit comments