flutter_log_kit 0.0.1
flutter_log_kit: ^0.0.1 copied to clipboard
A lightweight logging package for Flutter and Dart with persistent storage support.
π¦ flutter_log_kit #
A lightweight, extensible logging package for Dart and Flutter projects.
Supports:
- Different log levels:
debug,warning,error - Colored console output
- Optional persistent storage (e.g.,
SharedPreferences, in-memory, or custom) - Stack trace and source file context
- Easily pluggable into CLI or Flutter environments
π Installation #
Add to your pubspec.yaml:
dependencies:
log_kit:
git:
url: https://github.com/itschillipill/log_kit.git
π οΈ Usage #
1. createLogger() β for Flutter/SharedPreferences #
This method uses SharedPreferencesStorage under the hood. Suitable for persistent logging in apps.
import 'package:flutter_log_kit/log_kit.dart';
Future<void> main() async {
final logger = await LogKit.createLogger();
logger.log('Log from createLogger');
logger.warning('This is a warning');
logger.error('Something went wrong!', title: 'FatalError');
await logger.saveLogs();
for (final entry in logger.logs) {
print('- [${entry.logType}] ${entry.message}');
}
}
β οΈ This version depends on
shared_preferences, which internally relies ondart:ui.
It won't work in pure Dart environments (e.g.,dart test, command-line apps).
2. withStorage() β for Dart CLI, tests, or custom storage #
You can inject your own Storage implementation, e.g. for unit tests or non-Flutter apps.
Example with in-memory storage:
import 'package:flutter_log_kit/log_kit.dart';
class InMemoryStorage implements Storage {
final Map<String, dynamic> _store = {};
@override
Future<void> setValue<T>(String key, T value) async {
_store[key] = value;
}
@override
Future<T?> getValue<T>(String key) async {
final value = _store[key];
if (value is T) return value;
return null;
}
@override
Future<void> remove(String key) async => _store.remove(key);
@override
Future<void> clear() async => _store.clear();
}
Future<void> main() async {
final logger = LogKit.withStorage(storage: InMemoryStorage());
logger.log('CLI debug message');
logger.warning('This is a warning');
logger.error('Something went wrong');
await logger.saveLogs();
print('Current logs:');
for (final log in logger.logs) {
print('- ${log.message}');
}
}
π Storage Interface #
Define your own storage by implementing the Storage interface:
abstract class Storage {
Future<void> setValue<T>(String key, T value);
Future<T?> getValue<T>(String key);
Future<void> remove(String key);
Future<void> clear();
}
π§ͺ Running tests #
In environments that don't support Flutter, use withStorage() and a mock or in-memory storage for test compatibility.
dart test
Make sure your tests avoid using SharedPreferencesStorage directly.
π TODO #
- β File-based logging
- β SQLite/Isar backends
- β Web support
- β Filters, search, export
π License #
MIT Β© 2025 Chillipill