Flutter网络请求日志记录插件talker_rhttp_logger的使用
Flutter网络请求日志记录插件 talker_rhttp_logger 的使用
talker_rhttp_logger
是一个强大的 HTTP 日志拦截器,专为 rhttp
设计,并与 Talker
无缝集成。通过详细的、可自定义的日志记录功能,帮助你调试 HTTP 流量。
✨ 主要特性
- 🔍 全面的HTTP日志记录 - 记录请求、响应和错误
- 🎨 彩色输出 - 不同类型日志可以自定义颜色
- ⚡ 请求/响应过滤 - 控制哪些内容会被记录
- 🛠 灵活配置 - 可以微调每个日志记录的细节
- 🎯 性能优化 - 最小化日志记录带来的性能开销
📦 安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
talker_rhttp_logger: ^latest_version # 替换为最新版本号
然后运行:
flutter pub get
🚀 快速开始
下面是一个简单的示例,展示如何初始化 Talker
并创建带有日志记录功能的 HTTP 客户端:
import 'package:talker_rhttp_logger/talker_rhttp_logger.dart';
import 'package:talker/talker.dart';
import 'package:rhttp/rhttp.dart';
void main() {
// 初始化 Talker
final talker = Talker();
// 创建带有日志记录功能的 HTTP 客户端
final client = RHttpClient(
interceptors: [
TalkerRHttpLoggerInterceptor(
talker: talker,
),
],
);
// 发起请求 - 日志会自动显示!
}
⚙️ 配置选项
基本配置
你可以通过 TalkerRhttpLoggerSettings
类来定制日志记录的行为:
final settings = TalkerRhttpLoggerSettings(
// 响应日志选项
printResponseData: true, // 记录响应体
printResponseHeaders: false, // 记录响应头
printResponseMessage: true, // 记录响应状态信息
// 请求日志选项
printRequestData: true, // 记录请求体
printRequestHeaders: false, // 记录请求头
// 错误日志选项
printErrorData: true, // 记录错误响应体
printErrorHeaders: true, // 记录错误响应头
printErrorMessage: true, // 记录错误消息
);
final logger = TalkerRHttpLoggerInterceptor(
talker: talker,
settings: settings,
);
自定义颜色
通过设置不同的颜色,使你的日志更加直观:
final settings = TalkerRhttpLoggerSettings(
// 蓝色用于请求
requestPen: AnsiPen()..blue(),
// 绿色用于成功的响应
responsePen: AnsiPen()..green(),
// 红色用于错误
errorPen: AnsiPen()..red(),
);
选择性日志记录
你可以通过过滤函数来控制哪些请求、响应或错误会被记录:
final settings = TalkerRhttpLoggerSettings(
// 过滤请求
requestFilter: (request) {
// 只记录 API 请求
return request.url.path.startsWith('/api/');
},
// 过滤响应
responseFilter: (response) {
// 只记录非200状态码的响应
return response.statusCode != 200;
},
// 过滤错误
errorFilter: (error) {
// 只记录超时错误
return error.type == RhttpExceptionType.connectTimeout;
},
);
🔒 安全最佳实践
- 最小化敏感数据的日志记录
final settings = TalkerRhttpLoggerSettings(
// 禁用头和体的记录
printRequestHeaders: false,
printResponseHeaders: false,
printRequestData: false,
printResponseData: false,
);
- 过滤敏感端点
final settings = TalkerRhttpLoggerSettings(
requestFilter: (request) {
// 跳过敏感端点的日志记录
final sensitiveEndpoints = ['/auth', '/payment', '/users'];
return !sensitiveEndpoints.any(
(endpoint) => request.url.path.contains(endpoint),
);
},
);
- 选择性错误日志记录
final settings = TalkerRhttpLoggerSettings(
// 只记录错误消息,不记录完整的错误数据
printErrorData: false,
printErrorHeaders: false,
printErrorMessage: true,
);
📝 完整设置参考
TalkerRhttpLoggerSettings({
// 响应设置
bool printResponseData = true,
bool printResponseHeaders = false,
bool printResponseMessage = true,
// 错误设置
bool printErrorData = true,
bool printErrorHeaders = true,
bool printErrorMessage = true,
// 请求设置
bool printRequestData = true,
bool printRequestHeaders = false,
// 自定义颜色
AnsiPen? requestPen,
AnsiPen? responsePen,
AnsiPen? errorPen,
// 自定义过滤器
bool Function(HttpRequest request)? requestFilter,
bool Function(HttpResponse response)? responseFilter,
bool Function(RhttpException exception)? errorFilter,
});
示例 Demo
下面是一个完整的 Flutter 应用示例,展示了如何使用 talker_rhttp_logger
插件:
import 'package:flutter/material.dart';
import 'package:rhttp/rhttp.dart';
import 'package:talker_flutter/talker_flutter.dart';
import 'package:talker_rhttp_logger/talker_rhttp_logger.dart';
void main() async {
await Rhttp.init();
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: RhttpLoggerUi(),
);
}
}
class RhttpLoggerUi extends StatefulWidget {
const RhttpLoggerUi({super.key});
[@override](/user/override)
State<RhttpLoggerUi> createState() => _RhttpLoggerUiState();
}
class _RhttpLoggerUiState extends State<RhttpLoggerUi> {
late RhttpClient rhttpClient;
String response = '';
[@override](/user/override)
void dispose() {
rhttpClient.dispose();
super.dispose();
}
[@override](/user/override)
void initState() {
super.initState();
fetchComments();
}
Future<String> getComments() async {
rhttpClient = await RhttpClient.create(
settings: const ClientSettings(baseUrl: "https://httpstat.us"),
interceptors: [
TalkerRhttpLogger(
talker: TalkerFlutter.init(),
settings: const TalkerRhttpLoggerSettings(
printRequestHeaders: true,
printResponseHeaders: true,
printCurlCommand: true,
),
)
],
);
final response = await rhttpClient.post(
'/302',
body: const HttpBody.json(null),
headers: const HttpHeaders.rawMap({
'Accept': 'application/json',
}),
);
return response.body;
}
Future<void> fetchComments() async {
try {
final result = await getComments();
setState(() {
response = result.isEmpty ? "No Data" : result.toString();
});
} catch (e) {
setState(() {
response = 'Error: ${e.toString()}';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Rhttp Logger UI'),
),
body: Center(
child: response.isEmpty
? const CircularProgressIndicator()
: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Text(response),
),
),
);
}
}
更多关于Flutter网络请求日志记录插件talker_rhttp_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求日志记录插件talker_rhttp_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用talker_rhttp_logger
插件来记录网络请求日志的示例代码。这个插件可以帮助你捕获并打印HTTP请求的详细信息,包括请求头、请求体、响应头和响应体等。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加talker_rhttp_logger
的依赖:
dependencies:
flutter:
sdk: flutter
talker_rhttp_logger: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置dio拦截器
talker_rhttp_logger
通常与dio
库一起使用,因为它提供了一个拦截器来捕获HTTP请求和响应。以下是如何配置dio客户端以使用talker_rhttp_logger
的示例:
import 'package:dio/dio.dart';
import 'package:talker_rhttp_logger/talker_rhttp_logger.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Network Logging Example'),
),
body: Center(
child: NetworkLoggingExample(),
),
),
);
}
}
class NetworkLoggingExample extends StatefulWidget {
@override
_NetworkLoggingExampleState createState() => _NetworkLoggingExampleState();
}
class _NetworkLoggingExampleState extends State<NetworkLoggingExample> {
final Dio _dio = Dio();
@override
void initState() {
super.initState();
// 配置dio拦截器
_dio.interceptors.add(
LogInterceptor(
responseBody: true, // 是否记录响应体
requestBody: true, // 是否记录请求体
requestHeader: true, // 是否记录请求头
responseHeader: true, // 是否记录响应头
logPrint: print, // 日志输出函数,这里使用Flutter的print函数
)
);
// 发起一个网络请求作为示例
_fetchData();
}
Future<void> _fetchData() async {
try {
Response response = await _dio.get('https://jsonplaceholder.typicode.com/posts/1');
print('Response Data: ${response.data}');
} catch (error) {
print('Error: $error');
}
}
@override
Widget build(BuildContext context) {
return Text('Check console for network logs.');
}
}
3. 运行应用
现在你可以运行你的Flutter应用,并在控制台中看到网络请求的日志输出。
注意事项
- 确保你正在使用的
dio
和talker_rhttp_logger
版本兼容。 LogInterceptor
的logPrint
参数允许你自定义日志输出函数,这里为了简单起见,我们使用了Flutter的print
函数。- 你可以根据需要调整
LogInterceptor
的其他参数,例如是否记录请求体、响应体、请求头和响应头等。
通过以上步骤,你就可以在Flutter项目中成功使用talker_rhttp_logger
插件来记录网络请求日志了。