ChatApp/lib/network/DioLogInterceptor.dart
2024-06-14 13:03:03 +08:00

135 lines
4.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:dio/dio.dart';
///日志拦截器
class DioLogInterceptor extends Interceptor {
///请求前
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
String requestStr = "\n 请求 - URL:${/*options.baseUrl + */ options.uri}" + " 时间 - :${DateTime.now().millisecondsSinceEpoch}\n";
//requestStr += "- HEADER:\n${options.headers.mapToStructureString()}\n";
final data = options.data;
if (data != null) {
if (data is Map)
requestStr += "- BODY:\n${data.mapToStructureString()}\n";
else if (data is FormData) {
final formDataMap = Map()
..addEntries(data.fields)
..addEntries(data.files);
requestStr += "- BODY:\n${formDataMap.mapToStructureString()}\n";
} else
requestStr += "- BODY:\n${data.toString()}\n";
}
print(requestStr);
handler.next(options);
}
///出错前
@override
void onError(DioError err, ErrorInterceptorHandler handler) {
String errorStr = "\n==================== 响应 ====================\n"
"- URL:\n${err.requestOptions.path}\n"
"- METHOD: ${err.requestOptions.method}\n";
/* errorStr +=
"- HEADER:\n${err.response.headers.map.mapToStructureString()}\n";*/
if (err.response != null && err.response!.data != null) {
print('${err.type.toString()}');
errorStr += "- ERROR:\n${_parseResponse(err.response!)}\n";
} else {
errorStr += "- ERRORTYPE: ${err.type}\n";
errorStr += "- MSG: ${err.message}\n";
}
print(errorStr);
handler.next(err);
}
///响应前
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
String responseStr = "\n 响应 - URL:${response.requestOptions.uri}" + " 时间 - :${DateTime.now().millisecondsSinceEpoch}\n";
/* responseStr += "- HEADER:\n{";
response.headers.forEach(
(key, list) => responseStr += "\n " + "\"$key\" : \"$list\",");
responseStr += "\n}\n";*/
//responseStr += "- STATUS: ${response.statusCode}\n";
if (response.data != null) {
responseStr += "- BODY:\n ${_parseResponse(response)}";
}
printWrapped(responseStr);
handler.next(response);
}
void printWrapped(String text) {
final pattern = new RegExp('.{1,800}'); // 800 is the size of each chunk
pattern.allMatches(text).forEach((match) => print(match.group(0)));
}
String _parseResponse(Response response) {
String responseStr = "";
var data = response.data;
if (data is Map)
responseStr += data.mapToStructureString();
else if (data is List)
responseStr += data.listToStructureString();
else
responseStr += response.data.toString();
return responseStr;
}
}
///Map拓展MAp转字符串输出
extension Map2StringEx on Map {
String mapToStructureString({int indentation = 2}) {
String result = "";
String indentationStr = " " * indentation;
if (true) {
result += " {";
this.forEach((key, value) {
if (value is Map) {
var temp = value.mapToStructureString(indentation: indentation + 2);
result += "$indentationStr" + "\"$key\":$temp,";
} else if (value is List) {
result += "$indentationStr" + "\"$key\":${value.listToStructureString(indentation: indentation + 2)},";
} else {
result += "$indentationStr" + "\"$key\":\"$value\",";
}
});
result = result.substring(0, result.length - 1);
result += indentation == 2 ? "}" : "\n${" " * (indentation - 1)}}";
}
return result;
}
}
///List拓展List转字符串输出
extension List2StringEx on List {
String listToStructureString({int indentation = 2}) {
String result = "";
String indentationStr = " " * indentation;
if (true) {
result += "$indentationStr[";
this.forEach((value) {
if (value is Map) {
var temp = value.mapToStructureString(indentation: indentation + 2);
result += "\n$indentationStr" + "\"$temp\",";
} else if (value is List) {
result += value.listToStructureString(indentation: indentation + 2);
} else {
result += "\n$indentationStr" + "\"$value\",";
}
});
result = result.substring(0, result.length - 1);
result += "\n$indentationStr]";
}
return result;
}
}