flutter_awesome_logger 1.1.1
flutter_awesome_logger: ^1.1.1 copied to clipboard
Awesome debugging with floating logger, automatic API logging (using interceptor), and a beautiful UI for viewing logs.
Flutter Awesome Logger π #
A comprehensive Flutter logging package that makes debugging a breeze!
Features a floating logger, automatic API logging with Dio interceptor, and a beautiful UI for viewing logs.
π Documentation β’ π Installation β’ π‘ Examples β’ π¨ Customization
π Table of Contents #
- β¨ Features
- πΈ Screenshots
- π Getting Started
- π§ Configuration Options
- π Advanced Usage
- π¨ Customization
- π€ Contributing
- π License
- π Issues & Support
- π Connect With Us
β¨ Features #
Feature | Description |
---|---|
π± Floating Logger Button | Always accessible debug button that floats over your app - drag to reposition, auto-snaps to edges |
π Long Press Floating Button | Tap: Opens logger UI instantly β’ Long Press: Shows quick actions menu β’ Drag: Repositions button β’ Double Tap: Toggles pause/resume logging |
π€³ Shake to Toggle | Shake your device to show/hide the floating logger button - perfect for quick access during testing |
π€³ Shake to Enable | Shake your device to enable the logger when disabled - ideal for production builds with hidden debug access |
π Automatic API Logging | Built-in Dio interceptor for seamless API logging - captures requests, responses, errors, and timing automatically |
π¨ Beautiful UI | Clean, modern interface with syntax highlighting - dark/light themes, collapsible sections, and intuitive navigation |
π Multiple Log Levels | Support for debug, info, warning, error, and verbose logs - color-coded with filtering and search capabilities |
πΎ Smart Storage | Logs stored only when logger is enabled - conserves memory and respects privacy settings |
βΈοΈ Pause/Resume Logging | Temporarily pause all logging with visual indicators - useful for focusing on specific app sections |
π Search & Filter | Easily find specific logs with advanced filtering - search by text, level, timestamp, or source file |
π― Simple Configuration | Single enabled property controls both UI and storage - async support for conditional initialization |
π± Responsive Design | Works perfectly on all screen sizes - adaptive layouts for phones, tablets, and different orientations |
πΈ Screenshots #
πΌοΈ App Screenshots Gallery #
π― Floating Logger Button Always accessible debug interface |
π API Logs View Comprehensive API request/response logging |
π General Logs View Beautiful log interface with filtering |
π Log Details Detailed log inspection with syntax highlighting |
π Getting Started #
Installation #
π¦ Add to your pubspec.yaml
dependencies:
flutter_awesome_logger: ^latest_version
π Install the package
# Using Flutter CLI
flutter pub get
# Or using Dart CLI
dart pub get
π± Import in your Dart code
import 'package:flutter_awesome_logger/flutter_awesome_logger.dart';
Basic Usage #
β‘ Easiest Setup (Just 2 Lines!)
The absolute simplest way to get started - just wrap your app:
import 'package:flutter/material.dart';
import 'package:flutter_awesome_logger/flutter_awesome_logger.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FlutterAwesomeLogger(
child: YourHomePage(), // Your existing home page
),
);
}
}
That's it! π The logger is now active with default settings. You'll see:
- π± Floating logger button on your screen
- π€³ Shake-to-toggle functionality enabled
- π Both API logs and general logs tabs ready
π How to Get Logs in Each Tab #
π API Logs Tab #
For HTTP requests and responses
To populate the API Logs tab with your HTTP requests, add the Dio interceptor:
Step 1: Add the interceptor to your Dio instance
import 'package:dio/dio.dart';
import 'package:flutter_awesome_logger/flutter_awesome_logger.dart';
final dio = Dio();
dio.interceptors.add(FlutterAwesomeLoggerDioInterceptor());
// Now all API calls are automatically logged!
final response = await dio.get('https://api.example.com/data');
What you get:
- β Automatic capture - All requests and responses logged automatically
- β cURL generation - Copy-paste ready cURL commands for testing
- β Error handling - Network errors and HTTP errors captured
- β Performance timing - Request duration tracking
- β Advanced filtering - Filter by status code, method, or endpoint
- β Search functionality - Search through URLs, headers, and response content
π General Logs Tab #
For application logs and debugging
To populate the General Logs tab with your application logs:
Step 1: Create a logger instance // Create global logger instance (recommended: make a new file eg. my_logger.dart)
import 'package:flutter_awesome_logger/flutter_awesome_logger.dart';
final logger = FlutterAwesomeLogger.loggingUsingLogger;
Step 2: Use the logger throughout your app
import 'my_logger.dart';
class MyService {
void performOperation() {
// Debug information (development only)
logger.d('Starting complex operation with parameters: $params');
// General information (important events)
logger.i('User logged in successfully');
// Warnings (potential issues)
logger.w('API rate limit approaching: ${remaining} requests left');
// Errors (with full context)
try {
// Your code here
} catch (e, stackTrace) {
logger.e('Failed to process user data', error: e, stackTrace: stackTrace);
}
}
}
What you get:
- β Multiple log levels - DEBUG (grey), INFO (blue), WARNING (orange), ERROR (red)
- β Stack trace support - Full error context with file paths and line numbers
- β Source tracking - See exactly which file and method generated each log
- β Advanced filtering - Filter by log level, source file, or search content
- β Export capabilities - Copy individual logs or export entire filtered sets
- β Real-time updates - Logs appear instantly as your app runs
π§ Configuration Options #
βοΈ Flexible Configuration System #
ποΈ FlutterAwesomeLogger Configuration
The enabled
parameter supports both synchronous and asynchronous initialization:
π’ Immediate Enable
Logger starts immediately |
π΄ Immediate Disable
Logger is disabled |
β³ Async Enable
Waits for Future resolution |
π AwesomeLoggerConfig
Core logging behavior configuration
Property | Type | Default | Description |
---|---|---|---|
maxLogEntries |
int |
1000 |
Maximum number of log entries to keep in memory |
showFilePaths |
bool |
true |
Display file paths in console output |
showEmojis |
bool |
true |
Show emojis in console output for better readability |
useColors |
bool |
true |
Enable colored console output |
stackTraceLines |
int |
0 |
Number of stack trace lines to display |
const AwesomeLoggerConfig({
int maxLogEntries = 1000,
bool showFilePaths = true,
bool showEmojis = true,
bool useColors = true,
int stackTraceLines = 0,
});
π¨ FloatingLoggerConfig
Floating button UI and behavior configuration
Property | Type | Default | Description |
---|---|---|---|
backgroundColor |
Color |
Colors.deepPurple |
Background color of the floating button |
icon |
IconData |
Icons.developer_mode |
Icon displayed on the floating button |
showCount |
bool |
true |
Display log count badge on button |
enableGestures |
bool |
true |
Enable drag gestures for repositioning |
autoSnapToEdges |
bool |
true |
Automatically snap button to screen edges |
size |
double |
60.0 |
Size of the floating button |
enableShakeToShowHideFloatingButton |
bool |
true |
Enable shake-to-toggle button visibility |
enableShakeToEnableLogger |
bool |
true |
Enable shake-to-enable logger when disabled |
shakeSensitivity |
int |
8 |
Shake sensitivity (1-15, higher = less sensitive) |
const FloatingLoggerConfig({
Color backgroundColor = Colors.deepPurple,
IconData icon = Icons.developer_mode,
bool showCount = true,
bool enableGestures = true,
bool autoSnapToEdges = true,
double size = 60.0,
bool enableShakeToShowHideFloatingButton = true,
bool enableShakeToEnableLogger = true,
int shakeSensitivity = 8,
});
π Advanced Usage #
Accessing Log History #
// Get all stored logs
final logs = FlutterAwesomeLogger.getLogs();
// Get logs by level
final errorLogs = FlutterAwesomeLogger.getLogsByLevel('ERROR');
// Get recent logs
final recentLogs = FlutterAwesomeLogger.getRecentLogs(
duration: Duration(minutes: 10),
);
// Clear all logs
FlutterAwesomeLogger.clearLogs();
// Export logs as formatted text
String exportedLogs = FlutterAwesomeLogger.exportLogs();
Programmatically Show Logger UI #
// Show the logger history page
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const LoggerHistoryPage(),
),
);
Pause/Resume Logging #
// Pause all logging (both console and storage)
FlutterAwesomeLogger.setPauseLogging(true);
// Resume logging
FlutterAwesomeLogger.setPauseLogging(false);
// Check if logging is paused
bool isPaused = FlutterAwesomeLogger.isPaused;
Control Floating Logger Visibility #
// Check if floating logger is visible
bool isVisible = FlutterAwesomeLogger.isVisible();
// Show/hide the floating logger
FlutterAwesomeLogger.setVisible(true); // Show
FlutterAwesomeLogger.setVisible(false); // Hide
// Toggle visibility
FlutterAwesomeLogger.toggleVisibility();
Manage API Logs #
// Get all API logs
final apiLogs = FlutterAwesomeLogger.getApiLogs();
// Get API logs by type
final successLogs = FlutterAwesomeLogger.getApiLogsByType(ApiLogType.success);
final errorLogs = FlutterAwesomeLogger.getApiLogsByType(ApiLogType.serverError);
// Clear API logs
FlutterAwesomeLogger.clearApiLogs();
π¨ Customization #
The logger UI is highly customizable. You can:
- Change colors and themes
- Customize the floating button appearance
- Configure log display formats
- Add custom filters and search options
- Pause/resume logging as needed
- Control logging behavior with simple configuration
- Enable/disable shake-to-toggle functionality
- Enable/disable shake-to-enable functionality for production builds
- Adjust shake sensitivity for different devices
π€ Contributing #
We welcome contributions!
Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
π Issues & Support #
π Bug Reports #Found a bug? Let us know! |
π‘ Feature Requests #Have an idea? Share it! |
π¬ Discussions #Join the conversation! |