logError method

void logError(
  1. DioException error, {
  2. DateTime? startTime,
  3. DateTime? endTime,
})

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');
}