main
1import 'package:blood_pressure_app/config.dart';
2import 'package:flutter/foundation.dart';
3import 'package:logging/logging.dart';
4
5/// Logger instance
6final log = Logger('BloodPressureMonitor');
7
8/// Mixin to provide logging instances within classes
9///
10/// Usage: extend your class with this mixin by adding 'with TypeLogger'
11/// to be able to call the logger property anywhere in your class.
12mixin TypeLogger {
13 /// log interface, returns a [Logger] instance from https://pub.dev/packages/logging
14 Logger get logger => Logger('BPM[${Log.withoutTypes('$runtimeType')}]');
15}
16
17/// Simple class for manually logging in debug builds.
18///
19/// Also contains some logging configuration logic
20class Log {
21 static final _verboseLevel = Level.ALL;
22 static final _normalLevel = Level.WARNING;
23
24 /// Logs recorded this session.
25 static final logs = <LogRecord>[];
26
27 /// Whether debug logging is enabled.
28 static final enabled = kDebugMode && !isTestingEnvironment;
29
30 /// Whether verbose logging is activated.
31 static bool get isVerbose => Logger.root.level == Level.ALL;
32
33 /// Format a log record
34 static String format(LogRecord record) {
35 final loggerName = record.loggerName == 'BloodPressureMonitor' ? null : record.loggerName;
36 return '${record.level.name}: ${record.time}: ${loggerName != null ? '$loggerName: ' : ''}${record.message}';
37 }
38
39 /// Strip types from definition, i.e. MyClass<SomeType> -> MyClass
40 static String withoutTypes(String type) => type.replaceAll(RegExp(r'<[^>]+>'), '');
41
42 /// Register the apps logging config with [Logger].
43 static void setup() {
44 Logger.root.onRecord.listen(logs.add);
45 if (Log.enabled) {
46 Logger.root.level = _verboseLevel;
47 Logger.root.onRecord.listen((record) => debugPrint(Log.format(record)));
48 } else {
49 Logger.root.level = _normalLevel;
50 }
51 }
52
53 /// Set ultra verbose(true) or normal logging(false).
54 static void setVerbose(bool isVerbose) {
55 Logger.root.level = isVerbose
56 ? _verboseLevel
57 : _normalLevel;
58 Logger.root.info('Verbose logging set to $isVerbose');
59 }
60}