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}