onLogger method

void onLogger(
  1. Response response, {
  2. DateTime? startTime,
  3. W3CHeader? w3CHeader,
})

Implementation

void onLogger(
  http.Response response, {
  DateTime? startTime,
  W3CHeader? w3CHeader,
}) {
  final networkLogger = NetworkLogger();

  final requestHeaders = <String, dynamic>{};
  response.request?.headers.forEach((String header, dynamic value) {
    requestHeaders[header] = value;
  });

  final request = response.request;

  if (request == null) {
    return;
  }
  final requestBody = request is http.MultipartRequest
      ? json.encode(request.fields)
      : request is http.Request
          ? request.body
          : '';

  final requestData = NetworkData(
    startTime: startTime!,
    method: request.method,
    url: request.url.toString(),
    requestHeaders: requestHeaders,
    requestBody: requestBody,
    w3cHeader: w3CHeader,
  );

  final endTime = DateTime.now();

  final responseHeaders = <String, dynamic>{};
  response.headers.forEach((String header, dynamic value) {
    responseHeaders[header] = value;
  });
  var requestBodySize = 0;
  if (requestHeaders.containsKey('content-length')) {
    requestBodySize = int.parse(requestHeaders['content-length'] ?? '0');
  } else {
    // Calculate actual byte size for more accurate size estimation
    requestBodySize = _calculateBodySize(requestBody);
  }

  var responseBodySize = 0;
  if (responseHeaders.containsKey('content-length')) {
    responseBodySize = int.parse(responseHeaders['content-length'] ?? '0');
  } else {
    // Calculate actual byte size for more accurate size estimation
    responseBodySize = _calculateBodySize(response.body);
  }

  networkLogger.networkLog(
    requestData.copyWith(
      status: response.statusCode,
      duration: endTime.difference(requestData.startTime).inMicroseconds,
      responseContentType: response.headers.containsKey('content-type')
          ? response.headers['content-type']
          : '',
      responseHeaders: responseHeaders,
      responseBody: response.body,
      requestBodySize: requestBodySize,
      responseBodySize: responseBodySize,
      requestContentType: request.headers.containsKey('content-type')
          ? request.headers['content-type']
          : '',
    ),
  );
}