135 lines
4.3 KiB
Dart
135 lines
4.3 KiB
Dart
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;
|
||
}
|
||
}
|