forked from KRTirtho/spotube
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.dart
74 lines (62 loc) · 2.07 KB
/
logger.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;
import 'package:spotube/utils/platform.dart';
final _loggerFactory = SpotubeLogger();
final logEnv = {
if (!kIsWeb) ...Platform.environment,
};
SpotubeLogger getLogger<T>(T owner) {
_loggerFactory.owner = owner is String ? owner : owner.toString();
return _loggerFactory;
}
Future<File> getLogsPath() async {
String dir = (await getApplicationDocumentsDirectory()).path;
if (kIsAndroid) {
dir = (await getExternalStorageDirectory())?.path ?? "";
}
if (kIsMacOS) {
dir = path.join((await getLibraryDirectory()).path, "Logs");
}
final file = File(path.join(dir, ".spotube_logs"));
if (!await file.exists()) {
await file.create(recursive: true);
}
return file;
}
class SpotubeLogger extends Logger {
String? owner;
SpotubeLogger([this.owner]) : super(filter: _SpotubeLogFilter());
@override
void log(Level level, dynamic message,
{Object? error, StackTrace? stackTrace, DateTime? time}) async {
if (!kIsWeb) {
if (level == Level.error) {
String dir = (await getApplicationDocumentsDirectory()).path;
if (kIsAndroid) {
dir = (await getExternalStorageDirectory())?.path ?? "";
}
if (kIsMacOS) {
dir = path.join((await getLibraryDirectory()).path, "Logs");
}
await File(path.join(dir, ".spotube_logs")).writeAsString(
"[${DateTime.now()}]\n$message\n$stackTrace",
mode: FileMode.writeOnlyAppend);
}
}
super.log(level, "[$owner] $message", error: error, stackTrace: stackTrace);
}
}
class _SpotubeLogFilter extends DevelopmentFilter {
@override
bool shouldLog(LogEvent event) {
if ((logEnv["DEBUG"] == "true" && event.level == Level.debug) ||
(logEnv["VERBOSE"] == "true" && event.level == Level.trace) ||
(logEnv["ERROR"] == "true" && event.level == Level.error)) {
return true;
}
return super.shouldLog(event);
}
}