Logging
CherryPick lets you log all dependency injection (DI) events and errors using a flexible observer mechanism.
Custom Observers
Section titled “Custom Observers”You can pass any implementation of CherryPickObserver to your root scope or any sub-scope.
This allows centralized and extensible logging, which you can direct to print, files, visualization frameworks, external loggers, or systems like Talker.
Example: Printing All Events
Section titled “Example: Printing All Events”import 'package:cherrypick/cherrypick.dart';
void main() { // Use the built-in PrintCherryPickObserver for console logs final observer = PrintCherryPickObserver(); final scope = CherryPick.openRootScope(observer: observer); // All DI actions and errors will now be printed!}Example: Advanced Logging with Talker
Section titled “Example: Advanced Logging with Talker”For richer logging, analytics, or UI overlays, use an advanced observer such as talker_cherrypick_logger:
import 'package:cherrypick/cherrypick.dart';import 'package:talker/talker.dart';import 'package:talker_cherrypick_logger/talker_cherrypick_logger.dart';
void main() { final talker = Talker(); final observer = TalkerCherryPickObserver(talker); CherryPick.openRootScope(observer: observer); // All container events go to the Talker log system!}Default Behavior
Section titled “Default Behavior”- By default, logging is silent (
SilentCherryPickObserver) for production, with no output unless you supply an observer. - You can configure observers per scope for isolated, test-specific, or feature-specific logging.
Observer Capabilities
Section titled “Observer Capabilities”Events you can observe and log:
- Dependency registration
- Instance requests, creations, disposals
- Module installs/removals
- Scope opening/closing
- Cache hits/misses
- Cycle detection
- Diagnostics, warnings, errors
Just implement or extend CherryPickObserver and direct messages anywhere you want!
When to Use
Section titled “When to Use”- Enable verbose logging and debugging in development or test builds.
- Route logs to your main log system or analytics.
- Hook into DI lifecycle for profiling or monitoring.