dio_smart_logger 0.2.0 copy "dio_smart_logger: ^0.2.0" to clipboard
dio_smart_logger: ^0.2.0 copied to clipboard

Structured and secure Dio logging interceptor with cURL output, performance metrics, and deep error diagnostics.

dio_smart_logger 📡 #

A production-focused logging interceptor for Dio with structured output, sensitive data masking, cURL generation, and detailed error diagnostics.

pub package License: MIT

✨ Features #

  • Structured Output: Clean, easy-to-read request, response, and error logs.
  • Configurable Levels: Fine-grained control with none, error, info, debug, and verbose levels.
  • Security First: Built-in sensitive data masking for headers, query params, and request/response bodies.
  • cURL Generation: Ready-to-use cURL commands for easy request reproduction.
  • Performance Metrics: Track request duration, payload size, and transfer rate.
  • Advanced Error Diagnostics: Detailed root-cause analysis mapped by DioExceptionType.
  • Flexibility: Optional request filtering and custom printer callbacks.

📦 Installation #

Add the dependency to your pubspec.yaml:

dependencies:
  dio_smart_logger: ^0.2.0 # Or the latest version

Then run:

dart pub get

Or, using Flutter:

flutter pub add dio_smart_logger

🚀 Quick Start #

Attach the interceptor to your Dio instance:

import 'package:dio/dio.dart';
import 'package:dio_smart_logger/dio_smart_logger.dart';

final dio = Dio();

dio.interceptors.add(
  DioLoggerInterceptor(
    config: const DioLoggerConfig(
      enabled: true,
      level: DioLogLevel.debug,
      showCurl: true,
      maskSensitiveData: true,
    ),
  ),
);

🛠️ Advanced Configuration #

You can tailor the logger to your specific needs. Here's a comprehensive setup:

const loggerConfig = DioLoggerConfig(
  enabled: true,
  level: DioLogLevel.verbose, // Log everything
  showCurl: true,
  showPerformanceMetrics: true,
  logErrorStackTrace: true,
  maxBodyBytes: 64 * 1024, // Truncate bodies larger than 64KB
  requestFilter: _logOnlyApiHost, // Filter which requests to log
);

bool _logOnlyApiHost(RequestOptions options) {
  // Only log requests going to 'api.example.com'
  return options.uri.host == 'api.example.com';
}

dio.interceptors.add(DioLoggerInterceptor(config: loggerConfig));

Custom Printer #

If you want to route logs to a specific destination (like Crashlytics, a file, or a custom logging system) instead of the console, use the printer callback:

final logs = <String>[];

final interceptor = DioLoggerInterceptor(
  config: DioLoggerConfig(
    printer: (String message) {
      logs.add(message);
      // Send to Crashlytics, Datadog, etc.
    },
    useColors: false, // Usually you don't want ANSI colors in external loggers
  ),
);

🔒 Security Notes #

  • Auto-Masking: By default, common sensitive keys (like passwords, tokens, API keys) are masked with ***MASKED***.
  • Custom Secrets: You can extend the list of masked keys for your project:
    DioLoggerConfig(
      sensitiveKeys: ['my_custom_secret', 'social_security_number'],
    )
    
  • Header Blacklist: Completely suppress specific headers from being logged using the headerBlacklist parameter.

💡 Example #

Check out the example/main.dart file for a runnable setup with a mock adapter.

Run the example from the terminal:

dart run example/main.dart

📄 License #

This project is licensed under the MIT License - see the LICENSE file for details.

1
likes
160
points
233
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Structured and secure Dio logging interceptor with cURL output, performance metrics, and deep error diagnostics.

Repository (GitHub)
View/report issues

Topics

#dio #logging #interceptor #debugging

License

MIT (license)

Dependencies

dio

More

Packages that depend on dio_smart_logger