carapacik_dio_logger 2.0.0
carapacik_dio_logger: ^2.0.0 copied to clipboard
Dio logger with normal and compact modes, bounded redacted events, safe console output and cURL export.
import 'dart:typed_data';
import 'package:carapacik_dio_logger/carapacik_dio_logger.dart';
import 'package:dio/dio.dart';
/// Use --compact for summaries and --body to enable bodies in compact mode.
/// Add --compact-body for single-line bodies in either request/response mode.
Future<void> main(List<String> args) async {
final bool compact = args.contains('--compact');
final dio = Dio(BaseOptions(baseUrl: 'https://api.example.test'))
..httpClientAdapter = DemoAdapter()
..interceptors.add(
CarapacikDioLogger(
mode: compact ? DioLogMode.compact : DioLogMode.normal,
compactBody: args.contains('--compact-body'),
requestBody: !compact || args.contains('--body'),
responseBody: !compact || args.contains('--body'),
context: (options) => {'operation': options.extra['operation'] ?? '-'},
),
);
await dio.post<dynamic>(
'/items',
data: {'name': 'Example', 'password': 'this-is-redacted'},
options: Options(extra: {'operation': 'create-item'}),
);
dio.close();
}
/// The example is deterministic and sends no network requests.
class DemoAdapter implements HttpClientAdapter {
@override
Future<ResponseBody> fetch(
RequestOptions options,
Stream<Uint8List>? requestStream,
Future<void>? cancelFuture,
) async {
return ResponseBody.fromString(
'{"ok":true,"item":42}',
201,
headers: {
'content-type': ['application/json'],
},
);
}
@override
void close({bool force = false}) {}
}