pretty_dio_clean_logger 1.0.2 copy "pretty_dio_clean_logger: ^1.0.2" to clipboard
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 Map and List
  • Request and response header logging
  • Request body logging
  • Error logging with response details
  • FormData and Uint8List support
  • 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:developer for 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: false for normal production releases
  • enable it only for controlled internal builds, debugging, or trusted test environments
  • combine it with filter if you need to hide sensitive endpoints or binary data
  • use a custom logPrint if 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.

5
likes
150
points
240
downloads

Documentation

API reference

Publisher

verified publisherraihansikdar.com

Weekly Downloads

A clean and customizable Dio logger that prints beautifully formatted request, response, and error logs with filtering support.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

dio, flutter

More

Packages that depend on pretty_dio_clean_logger