Request Tracker Logger
A robust request tracking and exception logging library for Flutter applications, inspired by Spring Boot's Mapped Diagnostic Context (MDC).
Features
- Contextual Logging: Track logs with unique request IDs across asynchronous boundaries using Dart's
Zone. - Dio Interceptor & Extensions: Automatically track outgoing HTTP requests, log response times, and capture errors with easy setup.
- Global Exception Handling: Centralized handling for both Flutter framework errors and uncaught asynchronous errors.
- Custom Logging Delegates: Easily integrate with Sentry, Firebase Crashlytics, or your own backend.
- Log Redaction & Cleaning: Automatically mask sensitive data and filter out empty fields for cleaner logs.
- Debugging Tools: Generate
curlcommands for failed requests and clean stack traces by filtering framework noise. - Global Toggles: Enable or disable logging and exception tracking globally.
- Lightweight: Optimized to use
Stopwatchfor timing anddart:developerfor efficient logging.
Installation
Add request_tracker_logger to your pubspec.yaml:
dependencies:
request_tracker_logger:
git:
url: https://github.com/DivyanshVish/request_tracker_logger.git
Usage
1. Initialize Global Exception Handler
In your main.dart, initialize the GlobalExceptionHandler before running the app:
import 'package:flutter/material.dart';
import 'package:request_tracker_logger/request_tracker_logger.dart';
void main() {
GlobalExceptionHandler.initialize();
runApp(const MyApp());
}
2. Using the Dio Interceptor (via Extension)
The easiest way to attach tracking is using the .addRequestTracker() extension method:
import 'package:dio/dio.dart';
import 'package:request_tracker_logger/request_tracker_logger.dart';
final dio = Dio();
dio.addRequestTracker(
redactedFields: ['password', 'auth_token'], // Mask sensitive info
excludedEndpoints: ['/health', '/metrics'], // Skip logging for these
maxPayloadLength: 500, // Truncate long payloads
logCurlOnError: true, // Generate curl for failed requests
cleanStackTrace: true, // Filter framework noise from errors
);
3. Custom Logging (Integration with Sentry/Firebase)
Redirect all logs to your preferred analytics service:
RequestLogger.delegate = (message, {level, error, stackTrace, context, extra}) {
// Example: Forward to Sentry
// Sentry.captureMessage(message, level: level, extra: {...context, ...?extra});
};
4. Manual Contextual Logging
You can run code within a specific logging context, including arbitrary MDC keys:
import 'package:request_tracker_logger/request_tracker_logger.dart';
RequestLogger.runWithContext(() {
RequestLogger.info('Processing payment');
},
userId: 'user_123',
endpoint: '/pay',
extraContext: {'source': 'checkout_page'}
);
Configuration
| Feature | Control |
|---|---|
| Global Logs | RequestLogger.enabled = true/false; |
| Global Exceptions | GlobalExceptionHandler.enabled = true/false; |
License
This project is licensed under the MIT License - see the LICENSE file for details.