logResponse method

void logResponse(
  1. Response response, {
  2. DateTime? startTime,
  3. DateTime? endTime,
})

Log response details

Implementation

void logResponse(
  Response response, {
  DateTime? startTime,
  DateTime? endTime,
}) {
  if (!enabled) return;
  final statusCode = response.statusCode;
  final data = response.data;
  final headers = response.headers.map;
  final duration = endTime != null && startTime != null
      ? endTime.difference(startTime)
      : null;
  final method = response.requestOptions.method.toUpperCase(); // API Type

  _outputLine('\n$_green┌${'─' * 58}┐$_reset');
  _outputLine(
    '$_green│$_bold$_green📥 API RESPONSE$_reset $_bold$_yellow[${_formatDateTime(endTime ?? DateTime.now())} | ${duration?.inMilliseconds ?? 0}ms]$_reset$_green│$_reset',
  );
  _outputLine('$_green└${'─' * 58}┘$_reset');

  // Status and API Type
  final statusEmoji = _getStatusEmoji(statusCode);
  _outputLine(
    '$_bold${_getStatusColor(statusCode)}Status Code:$_reset $statusCode $statusEmoji',
  );
  _outputLine(
    '$_bold${_blue}API Type (Method):$_reset $method',
  ); // Display API Type

  // URL
  _outputLine(
    '$_bold${_magenta}URL:$_reset ${response.requestOptions.uri}',
  );

  // Response Headers (optional - can be commented out if too verbose)
  if (headers.isNotEmpty && _shouldLogHeaders()) {
    _outputLine('\n$_yellow📋 Response Headers:$_reset');
    headers.forEach((key, values) {
      final displayValue = _maskSensitiveHeader(key, values.join(', '));
      _outputLine('  $_bold$key:$_reset $displayValue');
    });
  }

  // Response Body (full print, no truncation)
  if (data != null) {
    _outputLine('\n$_yellow📦 Response Body:$_reset');
    if (data is Map || data is List) {
      try {
        final prettyJson = JsonEncoder.withIndent('  ').convert(data);
        _outputPrettyJson(prettyJson); // Full output
      } catch (e) {
        _outputLine(data.toString());
      }
    } else if (data is String) {
      _outputLine(data); // Full string, no truncation
    } else {
      _outputLine(data.toString());
    }
  }

  _outputLine('$_green└${'─' * 60}┘$_reset\n');
}