logError method
Log error details
Implementation
void logError(DioException error, {DateTime? startTime, DateTime? endTime}) {
if (!enabled) return;
final response = error.response;
final statusCode = response?.statusCode;
final duration = endTime != null && startTime != null
? endTime.difference(startTime)
: null;
final method = error.requestOptions.method.toUpperCase(); // API Type
_outputLine('\n$_red┌${'─' * 58}┐$_reset');
_outputLine(
'$_red│$_bold$_red❌ API ERROR$_reset $_bold$_yellow[${_formatDateTime(endTime ?? DateTime.now())} | ${duration?.inMilliseconds ?? 0}ms]$_reset$_red│$_reset',
);
_outputLine('$_red└${'─' * 58}┘$_reset');
// Error Type and API Type
_outputLine('$_bold${_red}Error Type:$_reset ${error.type}');
_outputLine('$_bold${_blue}API Type (Method):$_reset $method');
// URL
_outputLine('$_bold${_magenta}URL:$_reset ${error.requestOptions.uri}');
// Status Code
if (statusCode != null) {
_outputLine('$_bold${_red}Status Code:$_reset $statusCode');
}
// Error Message
if (error.message != null) {
_outputLine('$_red💬 Message:$_reset ${error.message}');
}
// Response Data (full print, no truncation)
if (response?.data != null) {
_outputLine('\n$_yellow📦 Error Response:$_reset');
final data = response!.data;
if (data is Map || data is List) {
try {
final prettyJson = JsonEncoder.withIndent(' ').convert(data);
_outputPrettyJson(prettyJson); // Full output
} catch (e) {
_outputLine(data.toString());
}
} else {
_outputLine(data.toString());
}
}
_outputLine('$_red└${'─' * 60}┘$_reset\n');
}