Skip to content

Commit 980d5ae

Browse files
committed
Moves the default level from the logger constructor to the filter getter, mitigates #38
1 parent aa2ae52 commit 980d5ae

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

lib/src/log_filter.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import 'logger.dart';
77
/// You can implement your own `LogFilter` or use [DevelopmentFilter].
88
/// Every implementation should consider [Logger.level].
99
abstract class LogFilter {
10-
Level? level;
10+
Level? _level;
11+
12+
// Still nullable for backwards compatibility.
13+
Level? get level => _level ?? Logger.level;
14+
15+
set level(Level? value) => _level = value;
1116

1217
Future<void> init() async {}
1318

lib/src/logger.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ class Logger {
5151
_printer = printer ?? defaultPrinter(),
5252
_output = output ?? defaultOutput() {
5353
_filter.init();
54-
_filter.level = level ?? Logger.level;
54+
if (level != null) {
55+
_filter.level = level;
56+
}
5557
_printer.init();
5658
_output.init();
5759
}

test/logger_test.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ class _CallbackPrinter extends LogPrinter {
3636
}
3737
}
3838

39+
/// Test class for the lazy-initialization of variables.
40+
class LazyLogger {
41+
static bool? printed;
42+
static final filter = ProductionFilter();
43+
static final printer = _CallbackPrinter((l, m, e, s) {
44+
printed = true;
45+
return [];
46+
});
47+
static final logger = Logger(filter: filter, printer: printer);
48+
}
49+
3950
void main() {
4051
Level? printedLevel;
4152
dynamic printedMessage;
@@ -194,10 +205,33 @@ void main() {
194205
expect(printedMessage, 'This is');
195206
});
196207

208+
test('Setting filter Levels', () {
209+
var filter = ProductionFilter();
210+
expect(filter.level, Logger.level);
211+
212+
final initLevel = Level.warning;
213+
var logger = Logger(
214+
filter: filter,
215+
printer: callbackPrinter,
216+
level: initLevel,
217+
);
218+
expect(filter.level, initLevel);
219+
220+
filter.level = Level.fatal;
221+
expect(filter.level, Level.fatal);
222+
});
223+
197224
test('Logger.close', () async {
198225
var logger = Logger();
199226
expect(logger.isClosed(), false);
200227
await logger.close();
201228
expect(logger.isClosed(), true);
202229
});
230+
231+
test('Lazy Logger Initialization', () {
232+
expect(LazyLogger.printed, isNull);
233+
LazyLogger.filter.level = Level.warning;
234+
LazyLogger.logger.i("This is an info message and should not show");
235+
expect(LazyLogger.printed, isNull);
236+
});
203237
}

0 commit comments

Comments
 (0)