LCOV - code coverage report

Current view
top level - /src - squadron_logger.dart
Test
lcov.info
Date
2022-04-02
Legend
Lines
hit
not hit
Branches
taken
not taken
# not executed
HitTotalCoverage
Lines414885.4%
Functions00-
Branches00-
Each row represents a line of source code
LineBranchHitsSource code
1import 'dart:developer' as dev show log;
2
3import 'squadron.dart';
4
5/// Basic interface for logging
6abstract class SquadronLogger {
7 /// Gets the log level
8 int get logLevel;
9
10 /// Sets the log level
11 set logLevel(int value);
12
13 /// Logs a message at [SquadronLogLevel.FINEST] level
14 void finest(dynamic message);
15
16 /// Logs a message at [SquadronLogLevel.FINER] level
17 void finer(dynamic message);
18
19 /// Logs a message at [SquadronLogLevel.FINE] level
20 void fine(dynamic message);
21
22 /// Logs a message at [SquadronLogLevel.CONFIG] level
23 void config(dynamic message);
24
25 /// Logs a message at [SquadronLogLevel.INFO] level
26 void info(dynamic message);
27
28 /// Logs a message at [SquadronLogLevel.WARNING] level
29 void warning(dynamic message);
30
31 /// Logs a message at [SquadronLogLevel.SEVERE] level
32 void severe(dynamic message);
33
34 /// Logs a message at [SquadronLogLevel.SHOUT] level
35 void shout(dynamic message);
36}
37
38/// Base class for simple loggers
39abstract class BaseSquadronLogger implements SquadronLogger {
40 @override
41 int logLevel = SquadronLogLevel.SEVERE;
42
43 /// Base logging method. Implement this method to display the [message].
44 /// The method is called if the log level is enabled and is provided with a formatted message such as `[timestamp] [log-level] [Squadron.id] text of the message`
45 void log(String message);
46
472 void _log(int level, dynamic message) {
483 if (level >= logLevel) {
492 if (message is Function) {
502 message = message();
51 }
52 final header =
537 '[${DateTime.now().toUtc().toIso8601String()}] [${SquadronLogLevel.getName(level)}] [${Squadron.id}]';
54 Iterable<String> lines;
552 if (message is Iterable) {
561 lines = message
574 .map((m) => m?.toString() ?? '')
585 .expand((m) => m.toString().split('\n'))
594 .where((m) => m.isNotEmpty);
60 } else {
616 lines = message?.toString().split('\n').where((m) => m.isNotEmpty) ??
620 const [];
63 }
643 for (var line in lines) {
652 log('$header $line');
66 }
67 }
681 }
69
701 @override
712 void finest(dynamic message) => _log(SquadronLogLevel.FINEST, message);
72
731 @override
742 void finer(dynamic message) => _log(SquadronLogLevel.FINER, message);
75
761 @override
772 void fine(dynamic message) => _log(SquadronLogLevel.FINE, message);
78
791 @override
802 void config(dynamic message) => _log(SquadronLogLevel.CONFIG, message);
81
821 @override
832 void info(dynamic message) => _log(SquadronLogLevel.INFO, message);
84
851 @override
862 void warning(dynamic message) => _log(SquadronLogLevel.WARNING, message);
87
881 @override
892 void severe(dynamic message) => _log(SquadronLogLevel.SEVERE, message);
90
911 @override
922 void shout(dynamic message) => _log(SquadronLogLevel.SHOUT, message);
93}
94
95class DevSquadronLogger extends BaseSquadronLogger {
960 @override
97
98 /// Log based on `dart:developer`
990 void log(dynamic message) => dev.log(message?.toString() ?? '');
100}
101
102class ConsoleSquadronLogger extends BaseSquadronLogger {
103 /// Log to console
1040 @override
1050 void log(dynamic message) => print(message);
106}
107
108/// Log level constants, compatible with `package:logging`
109class SquadronLogLevel {
1100 SquadronLogLevel._();
111
112 /// Lowest log level
113 // ignore: constant_identifier_names
114 static const ALL = 0;
115
116 /// Finest log level
117 // ignore: constant_identifier_names
118 static const FINEST = 300;
119
120 /// Finer log level
121 // ignore: constant_identifier_names
122 static const FINER = 400;
123
124 /// Fine log level
125 // ignore: constant_identifier_names
126 static const FINE = 500;
127
128 /// Config log level
129 // ignore: constant_identifier_names
130 static const CONFIG = 700;
131
132 /// Information log level
133 // ignore: constant_identifier_names
134 static const INFO = 800;
135
136 /// Warning log level
137 // ignore: constant_identifier_names
138 static const WARNING = 900;
139
140 /// Severe log level
141 // ignore: constant_identifier_names
142 static const SEVERE = 1000;
143
144 /// Shout log level
145 // ignore: constant_identifier_names
146 static const SHOUT = 1200;
147
148 /// No logging
149 // ignore: constant_identifier_names
150 static const OFF = 2000;
151
152 /// Gets the log level name
1532 static String getName(int logLevel) {
1542 if (logLevel < FINEST) return 'ALL';
1552 if (logLevel < FINER) return 'FINEST';
1562 if (logLevel < FINE) return 'FINER';
1572 if (logLevel < CONFIG) return 'FINE';
1582 if (logLevel < INFO) return 'CONFIG';
1592 if (logLevel < WARNING) return 'INFO';
1602 if (logLevel < SEVERE) return 'WARNING';
1612 if (logLevel < SHOUT) return 'SEVERE';
1622 if (logLevel < OFF) return 'SHOUT';
1630 return 'OFF';
1641 }
165}
Choose Features