logger method
dynamic
logger(
- String message, {
- LogExtra? logExtra,
- bool uriFrame = false,
- DateTime? time,
- int? sequenceNumber,
- int level = 0,
- String? name,
- Zone? zone,
- Object? error,
- StackTrace? stackTrace,
inherited
logExtra
print stack frame info; (at log.name)
uriFrame
show logExtra
uri; (at log.message)
Implementation
logger(
String message, {
LogExtra? logExtra,
bool uriFrame = false,
DateTime? time,
int? sequenceNumber,
int level = 0,
String? name, // null will use 'stateKey'
Zone? zone,
Object? error,
StackTrace? stackTrace,
}) {
if (logExtra != null) {
try {
final t = Trace.from(StackTrace.current);
// print('debug trace\n$t');
final maxAt = t.frames.length - 1;
int targetFrame = 0;
for (final t in t.frames) {
if (!'${t.uri}'.startsWith('package:flowr_dart/')) break;
targetFrame++;
}
final memberUriFm = switch (logExtra) {
LogExtra.inner => (-1, 0),
LogExtra.self => (0, 1),
LogExtra.outer => (0, 2),
LogExtra.all => (0, null)
};
final at = targetFrame + memberUriFm.$1;
name = t.frames[min(at, maxAt)].member;
//
if (uriFrame) {
final atOffset = memberUriFm.$2;
if (atOffset != null) {
final at = targetFrame + atOffset;
final fm = t.frames[min(at, maxAt)];
final location = fm.location;
final tips = location.startsWith('package:flowr_dart/')
? '\t ----- DEV TIPS ----- \n'
'\t Can not show correct location. You may need add "await" for VM::updateRaw method\n'
'\t -----'
: '';
message = '$message #> $location\n$tips';
} else {
message = '$message #> \n${t.frames.join('\n')}';
}
}
} catch (e, s) {
frPrint("FlowR LOGGER ERROR $e; \n$s");
}
}
frPrint(message,
time: time,
sequenceNumber: sequenceNumber,
level: level,
name: name ?? '$runtimeType',
zone: zone,
error: error,
stackTrace: stackTrace);
}