import 'dart:async';
import 'dart:developer' as developer;
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
@visibleForTesting
final Logger logger = Logger('GoRouter');
bool _enabled = false;
void log(String message, {Level level = Level.INFO}) {
if (_enabled) {
logger.log(level, message);
}
}
StreamSubscription<LogRecord>? _subscription;
void setLogging({bool enabled = false}) {
_subscription?.cancel();
_enabled = enabled;
if (!enabled || hierarchicalLoggingEnabled) {
return;
}
_subscription = logger.onRecord.listen((LogRecord e) {
if (e.level >= Level.SEVERE) {
final Object? error = e.error;
FlutterError.dumpErrorToConsole(
FlutterErrorDetails(
exception: error is Exception ? error : Exception(error),
stack: e.stackTrace,
library: e.loggerName,
context: ErrorDescription(e.message),
),
);
} else {
_developerLogFunction(e);
}
});
}
void _developerLog(LogRecord record) {
developer.log(
record.message,
time: record.time,
sequenceNumber: record.sequenceNumber,
level: record.level.value,
name: record.loggerName,
zone: record.zone,
error: record.error,
stackTrace: record.stackTrace,
);
}
@visibleForTesting
void Function(LogRecord)? testDeveloperLog;
void Function(LogRecord) get _developerLogFunction =>
testDeveloperLog ?? _developerLog;