astute_logger 2.1.0
astute_logger: ^2.1.0 copied to clipboard
A simple and powerful logger for Flutter apps with support for color-coding, JSON pretty-printing, and performance tracking.
Astute Logger #
A lightweight yet powerful logging utility designed specifically for Flutter applications. Astute Logger provides beautiful console output, persistent file logging, remote log forwarding, log rotation, request context propagation, and sensitive data redaction โ all with a simple and intuitive API.
โจ Features #
- ๐จ Color-coded console logs
- ๐ Persistent file logging
- ๐ Automatic log rotation
- ๐ Remote logging support
- ๐ Automatic sensitive data redaction
- โก Async logging queue (non-blocking)
- ๐ Caller location tracking
- ๐งญ Log Context / Request ID propagation
- ๐ Advanced log analysis (search + pagination)
- ๐ค Share logs via native share dialog
- ๐งช Testing support with console override
- ๐ Zero logging in Release Mode
๐ฆ Installation #
Add to pubspec.yaml:
dependencies:
astute_logger: ^1.0.0
path_provider: ^2.0.0
share_plus: ^12.0.0
Then run:
flutter pub get
๐ Quick Start #
Basic Logging #
import 'package:astute_logger/astute_logger.dart';
final logger = AstuteLogger('MyApp');
logger.debug('Debug message');
logger.info('Application started');
logger.warning('Unexpected behaviour');
logger.error('Something went wrong');
๐ File Logging #
final logger = AstuteLogger(
'MyApp',
enableFileLogging: true,
);
await logger.initFileLogging();
logger.info("This will be saved to file");
Custom directory:
await logger.initFileLogging(
directoryPath: '/custom/log/directory',
);
๐ Log Rotation #
Large log files can slow down devices.
Astute Logger automatically rotates log files when they exceed a defined size.
Default Configuration #
Max file size: 5 MB
Max rotated files: 5
Custom Configuration #
final logger = AstuteLogger(
'MyApp',
enableFileLogging: true,
maxFileSizeBytes: 10 * 1024 * 1024, // 10MB
maxRotatedFiles: 10,
);
Rotation Example #
app.log
app_1.log
app_2.log
app_3.log
Oldest logs are automatically deleted.
๐งญ Log Context (Request ID Propagation) #
Attach metadata to every log automatically.
Useful for:
- user sessions
- request tracing
- debugging multi-user systems
- backend correlation
Set Context #
logger.setContext({
"userId": "42",
"sessionId": "sess_99",
});
Log Output #
[2026-03-12 14:21:11] [INFO] [userId=42 sessionId=sess_99] User login successful
Remove Context Value #
logger.removeContext("sessionId");
Clear Context #
logger.clearContext();
๐ Remote Logging #
Send logs to your backend.
final logger = AstuteLogger(
'MyApp',
enableRemote: true,
remoteSender: (message, level, tag) async {
await http.post(
Uri.parse("https://api.example.com/logs"),
body: jsonEncode({
"message": message,
"level": level.toString(),
}),
);
},
);
๐ Sensitive Data Redaction #
Sensitive fields are automatically hidden.
Example:
logger.info(
'Login payload {"password":"secret","token":"abc"}'
);
Output:
Login payload {"password":"***","token":"***"}
Redacted fields:
- password
- token
- access_token
- refresh_token
Add custom patterns:
AstuteLogger.globalRedactionPatterns.add(
RegExp(r'("api_key"\s*:\s*")[^"]+(")', caseSensitive: false),
);
๐จ Color Logging #
Console logs are color coded:
| Level | Color |
|---|---|
| DEBUG | Blue |
| INFO | Green |
| WARNING | Yellow |
| ERROR | Red |
Enable color logging:
final logger = AstuteLogger(
'MyApp',
enableColorLogging: true,
);
๐ JSON Pretty Printing #
logger.logJson({
"name": "John",
"age": 30
});
Output:
{
"name": "John",
"age": 30
}
โฑ Measure Execution Time #
logger.logExecutionTime("Database Query", () {
return db.query("SELECT * FROM users");
});
Output:
Database Query executed in 42 ms
๐ Search Logs #
Search inside stored log files.
await logger.searchLogs(
keywords: ["error", "network"],
reverse: true,
);
๐ Paginated Log Viewer #
Print logs safely without freezing the UI.
await logger.printLogsPaginated(
chunkSize: 200,
reverse: true,
);
๐ค Share Logs #
Share logs via native share dialogs.
await logger.shareLogFile(
subject: "Debug Logs",
text: "Please see attached logs",
);
๐งช Testing Support #
Capture logs during unit tests.
final logs = <String>[];
AstuteLogger.consoleOverride = (msg) {
logs.add(msg);
};
final logger = AstuteLogger("Test");
logger.error("Test error");
expect(logs.first.contains("Test error"), true);
Reset after test:
AstuteLogger.consoleOverride = null;
๐ Log Format #
Logs contain rich debugging metadata:
[2026-03-12 21:10:10] [INFO] [userId=42 sessionId=s991] [loginUser @ auth_service.dart:44] Login success
Each log includes:
- timestamp
- log level
- context metadata
- function name
- file name
- line number
- message
โ ๏ธ Important Notes #
Logging Disabled in Release Mode #
To avoid performance overhead:
if (kReleaseMode) return;
All logs are disabled automatically.
Always Dispose Logger #
Flush logs on shutdown.
await logger.dispose();
๐ฑ Platform Support #
| Platform | Console | File | Remote | Share |
|---|---|---|---|---|
| Android | โ | โ | โ | โ |
| iOS | โ | โ | โ | โ |
| Web | โ | โ | โ | โ |
| macOS | โ | โ | โ | โ |
| Windows | โ | โ | โ | โ |
| Linux | โ | โ | โ | โ |
๐ค Contributing #
Contributions are welcome!
Open issues or submit pull requests on GitHub.
๐ License #
MIT License
โค๏ธ Built for Flutter Developers #
Astute Logger is designed to provide production-grade logging without heavy dependencies, giving Flutter developers a powerful yet simple debugging tool.