pretty_dio_clean_logger 1.0.2
pretty_dio_clean_logger: ^1.0.2 copied to clipboard
A clean and customizable Dio logger that prints beautifully formatted request, response, and error logs with filtering support.
pretty_dio_clean_logger #
A clean and customizable logging interceptor for Dio that prints formatted request, response, and error logs with filtering support.
Features #
- Pretty request and response logs
- JSON pretty printing for
MapandList - Request and response header logging
- Request body logging
- Error logging with response details
FormDataandUint8Listsupport- Custom log printer support with
logPrint - Request/response filtering with
filter - Release-mode logging control with
enableLogOnRelease
Logging Behavior #
This package now uses different logging strategies depending on build mode:
- Debug mode: logs are buffered and flushed through
dart:developerfor grouped console output - Release mode: logs are printed line by line with
debugPrint - Custom printer: if you pass
logPrint, it overrides the default behavior in both debug and release mode
If you want logs in release builds, keep enableLogOnRelease: true.
🔒 Security Note for enableLogOnRelease #
enableLogOnRelease is an important setting from a security perspective.
When enableLogOnRelease is true, request and response logs can appear in release builds. That may expose:
- access tokens
- session cookies
- request headers
- request bodies
- API responses with private user data
For production apps, you should enable release logging only when you fully understand the risk.
Recommended guidance:
- use
enableLogOnRelease: falsefor normal production releases - enable it only for controlled internal builds, debugging, or trusted test environments
- combine it with
filterif you need to hide sensitive endpoints or binary data - use a custom
logPrintif you want to redirect logs to a safer destination
Example:
PrettyDioCleanLogger(
enableLogOnRelease: false,
)
Usage #
Add the interceptor to your Dio instance:
import 'package:dio/dio.dart';
import 'package:pretty_dio_clean_logger/pretty_dio_clean_logger.dart';
final dio = Dio()
..interceptors.add(
PrettyDioCleanLogger(),
);
Configuration Example #
import 'package:dio/dio.dart';
import 'package:pretty_dio_clean_logger/pretty_dio_clean_logger.dart';
final dio = Dio()
..interceptors.add(
PrettyDioCleanLogger(
requestHeader: true,
requestBody: true,
responseBody: true,
responseHeader: false,
error: true,
compact: true,
maxWidth: 120,
enabled: true,
enableLogOnRelease: true,
filter: (options, args) {
if (options.path.contains('/posts')) {
return false;
}
return !args.isResponse || !args.hasUint8ListData;
},
),
);
Custom Log Printer #
You can override the default logger completely:
PrettyDioCleanLogger(
logPrint: (object) {
print(object);
},
)
This is useful if you want to:
- write logs to a file
- forward logs to another logger
- enforce the same logging behavior in all build modes
Parameters #
| Parameter | Type | Default | Description |
|---|---|---|---|
request |
bool |
true |
Show request line |
requestHeader |
bool |
false |
Show request headers and extras |
requestBody |
bool |
false |
Show request body |
responseHeader |
bool |
false |
Show response headers |
responseBody |
bool |
true |
Show response body |
error |
bool |
true |
Show Dio errors |
compact |
bool |
true |
Print compact JSON when possible |
maxWidth |
int |
120 |
Maximum log line width |
logPrint |
void Function(Object)? |
null |
Custom log printer |
filter |
bool Function(RequestOptions, FilterArgs)? |
null |
Filter request and response logs |
enabled |
bool |
true |
Globally enable or disable logging |
enableLogOnRelease |
bool |
true |
Show logs in release mode |
Filter Example #
PrettyDioCleanLogger(
filter: (options, args) {
if (!args.isResponse) {
return !options.path.contains('/health');
}
return !args.hasUint8ListData;
},
)
Example Output #
┌┤ Request │ GET
│ https://jsonplaceholder.typicode.com/posts/1
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌┤ Response │ GET │ Status: 200 OK │ Time: 154 ms
│ https://jsonplaceholder.typicode.com/posts/1
┌ Body
│
│ {
│ "id": 1,
│ "title": "example"
│ }
│
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Notes #
- This package depends on Flutter because release-mode logging uses
debugPrint - In debug mode, grouped output is intentional
- In release mode, line-by-line output is intentional
License #
This project is licensed under the MIT License.