๐ฆ Offline Logger SDK โ Enterprise Documentation
๐ Overview
Offline Logger is a production-grade, offline-first observability SDK for Flutter applications.
It enables:
- Reliable logging in low/no internet environments
- Crash tracking and debugging
- Automatic batching and syncing
- Scalable observability for large deployments
๐งฑ Architecture
App Layer
โ
OfflineLogger SDK
โ
Hive Storage (Local DB)
โ
Sync Engine (Retry + Batch)
โ
Backend API
โ๏ธ Initialization
init(LoggerConfig config)
Purpose
Initializes entire SDK system.
Responsibilities
- Initializes Hive
- Creates SyncService
- Generates sessionId
- Fetches device info
- Starts heartbeat
- Sets lifecycle + connectivity listeners
- Flushes pre-init logs
Usage
await OfflineLogger.init(
LoggerConfig(
apiEndpoint: "https://api.yourserver.com/logs",
enableDebugLogs: true,
),
);
๐ง Logging APIs
log()
General logging
OfflineLogger.log("User clicked button");
error()
Recoverable errors
OfflineLogger.error("API failed");
crash()
Critical crash logging
OfflineLogger.crash(error, stack);
๐ท๏ธ Tagged Logging
logWithTag()
OfflineLogger.logWithTag("VIDEO", "Playback started");
errorWithTag()
OfflineLogger.errorWithTag("API", "Login failed");
๐งพ Metadata
setGlobalMetadata()
Adds metadata to all logs
OfflineLogger.setGlobalMetadata({
"userId": "123",
"schoolId": "UP_1023",
});
restartSession()
Creates new session
OfflineLogger.restartSession();
๐ Sync System
sync()
Triggers log upload
Features
- Batch processing
- Retry with backoff
- Timeout protection
- Sync locking
safeSync()
Safe wrapper
await OfflineLogger.safeSync();
flush()
Force upload logs
await OfflineLogger.flush();
๐ค Data Access
exportLogs()
final logs = await OfflineLogger.exportLogs();
๐งน Cleanup
dispose()
await OfflineLogger.dispose();
๐ฑ Crash Handling
runAppWithLogger()
Wrap app
OfflineLogger.runAppWithLogger(() {
runApp(MyApp());
});
๐ Internal Mechanisms
Pre-init Queue
- Stores logs before init
- Max size: 100
- Auto flushed
Sync Engine
- Batching
- Retry
- Timeout (15s)
Connectivity
- Debounced sync trigger
Heartbeat
- Runs every 5 min
๐ฆ Log Structure
{
"id": "uuid",
"type": "info",
"message": "...",
"priority": "low",
"metadata": {},
"timestamp": "ISO",
"isSynced": false
}
๐ Captured Data
Automatic
- Flutter errors
- Unhandled exceptions
- Lifecycle events
- Connectivity changes
Manual
- User actions
- API failures
- Business logic
โ ๏ธ Limitations
- No native crash capture
- No ANR detection
- No performance monitoring
๐ง Best Practices
Do
- Log meaningful events
- Use metadata
- Use tagging
Avoid
- Sensitive data
- Large payloads
- Over-logging
๐ Production Readiness
โ Offline-first
โ Retry + batching
โ Scalable
โ Memory-safe
โ No log loss
๐ Summary
Offline Logger provides a complete observability layer for Flutter apps, optimized for low-connectivity environments and large-scale deployments.