Skip to content

Logger listeners unexpectedly fire with lower levels #481

Open
@craiglabenz

Description

@craiglabenz

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?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions