-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathConsoleAppender.dart
117 lines (105 loc) · 3.05 KB
/
ConsoleAppender.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import 'dart:async';
import 'package:log_4_dart_2/log_4_dart_2.dart';
import 'package:log_4_dart_2/src/LogRecordFormatter.dart';
import 'dart:developer' as devtools;
/// Set devtools this when running on the physical app or on webbrowser. Will log to dart:devtools. This way, the result
/// will not be a simple string, but the passed in objects (error etc.)
enum ConsoleLoggerMode { stdout, devtools }
///
/// A appender for writing logs to the console output
///
class ConsoleAppender extends Appender {
static const LOGGER_NAME = 'CONSOLE';
ConsoleLoggerMode mode = ConsoleLoggerMode.stdout;
// for devtools logging
int sequenceNumber = 1;
@override
void append(LogRecord logRecord) {
logRecord.loggerName ??= getType();
if (mode == ConsoleLoggerMode.devtools) {
// void log(
// String message,
// {DateTime? time,
// int? sequenceNumber,
// int level = 0,
// String name = '',
// Zone? zone,
// Object? error,
// StackTrace? stackTrace}
// )
devtools.log(
LogRecordFormatter.eval(logRecord.message),
time: logRecord.time,
sequenceNumber: sequenceNumber++,
level: logRecord.level.value,
name: '${logRecord.tag}',
zone: Zone.current,
error: logRecord.error,
stackTrace: logRecord.stackTrace,
);
} else {
print(LogRecordFormatter.format(logRecord, format!,
dateFormat: dateFormat, brackets: brackets));
}
var tabs = '\t';
if (logRecord.error != null) {
print(tabs + logRecord.error.toString());
tabs = tabs + tabs;
}
if (logRecord.stackTrace != null) {
print(tabs + logRecord.stackTrace.toString());
}
}
@override
String toString() {
return '$type $format $level $lineInfo';
}
@override
Future<void>? init(Map<String, dynamic> config, bool test, DateTime? date) {
created = date ?? DateTime.now();
type = AppenderType.CONSOLE;
if (config.containsKey('format')) {
format = config['format'];
} else {
format = Appender.defaultFormat;
}
if (config.containsKey('dateFormat')) {
dateFormat = config['dateFormat'];
} else {
dateFormat = Appender.defaultDateFormat;
}
if (config.containsKey('level')) {
level = Level.fromString(config['level']);
} else {
level = Level.INFO;
}
if (config.containsKey('depthOffset')) {
clientDepthOffset = config['depthOffset'];
} else {
clientDepthOffset = 0;
}
if (config.containsKey('brackets')) {
brackets = config['brackets'];
} else {
brackets = false;
}
if (config.containsKey('mode')) {
if (config['mode'] == 'stdout') {
mode = ConsoleLoggerMode.stdout;
} else if (config['mode'] == 'devtools') {
mode = ConsoleLoggerMode.devtools;
}
} else {
mode = ConsoleLoggerMode.stdout;
}
return null;
}
@override
Appender getInstance() {
return ConsoleAppender();
}
@override
String getType() {
return AppenderType.CONSOLE.name;
}
}