logging icon indicating copy to clipboard operation
logging copied to clipboard

Logger listeners unexpectedly fire with lower levels

Open craiglabenz opened this issue 2 years ago • 1 comments

Is the following behavior expected?

Consider a root logger that filters on Level.WARNING with a child logger that filters on Level.FINE, but has no listeners.

Once the child logger accepts a message, it propagates up to the root logger and prints, despite being a lower level than the root logger's configuration.

import 'package:logging/logging.dart';

void main() {
  hierarchicalLoggingEnabled = true;
  Logger.root.level = Level.WARNING;
  Logger.root.onRecord.listen((record) {
    print('WARNING ONLY: ${record.message}');
  });

  final fineLogger = Logger('FINE LOGGER');
  fineLogger.level = Level.FINE;
  fineLogger.fine('FINE');
}

results in

$ dart logging_test.dart
WARNING ONLY: FINE

Of course, adjusting the root logger's handler to be like so can solve this problem:

  Logger.root.onRecord.listen((record) {
    if (record.level < Logger.root.level) return;
    print('WARNING ONLY: ${record.message}');
  });

But this feels redundant.

Is the original behavior expected?

craiglabenz avatar Jul 09 '23 08:07 craiglabenz

Discovered while adding documentation requested in #132.

craiglabenz avatar Jul 09 '23 08:07 craiglabenz