[![Melos + FVM CI](https://github.com/pese-git/cherrypick/actions/workflows/pipeline.yml/badge.svg)](https://github.com/pese-git/cherrypick/actions/workflows/pipeline.yml) [![Netlify Status](https://api.netlify.com/api/v1/badges/3c3e0f98-27a9-4dd4-9eab-4be0b96798b8/deploy-status)](https://app.netlify.com/projects/cherrypick-di/deploys) --- # talker_cherrypick_logger An integration package that allows you to log [CherryPick](https://github.com/pese-dot-work/cherrypick) Dependency Injection (DI) container events using the [Talker](https://pub.dev/packages/talker) logging system. All CherryPick lifecycle events, instance creations, cache operations, module activities, cycles, and errors are routed directly to your Talker logger for easy debugging and advanced diagnostics. --- ## Features - **Automatic DI container logging:** All core CherryPick events (instance creation/disposal, cache hits/misses, module install/removal, scopes, cycles, errors) are logged through Talker. - **Flexible log levels:** Each event uses the appropriate Talker log level (`info`, `warning`, `verbose`, `handle` for errors). - **Works with any Talker setup:** No extra dependencies required except Talker and CherryPick. - **Improves debugging and DI transparency** in both development and production. --- ## Getting started ### 1. Add dependencies Install the package **from [pub.dev](https://pub.dev/packages/talker_cherrypick_logger)**: In your `pubspec.yaml`: ```yaml dependencies: cherrypick: ^latest talker: ^latest talker_cherrypick_logger: ^latest ``` ### 2. Import the package ```dart import 'package:talker/talker.dart'; import 'package:cherrypick/cherrypick.dart'; import 'package:talker_cherrypick_logger/talker_cherrypick_logger.dart'; ``` --- ## Usage ### Basic integration 1. **Create a Talker instance** (optionally customize Talker as you wish): ```dart final talker = Talker(); ``` 2. **Create the observer and pass it to CherryPick:** ```dart final observer = TalkerCherryPickObserver(talker); // On DI setup, pass observer when opening (or re-opening) root or any custom scope CherryPick.openRootScope(observer: observer); ``` 3. **Now all DI events appear in your Talker logs!** #### Example log output - `[binding][CherryPick] MyService — MyServiceImpl (scope: root)` - `[create][CherryPick] MyService — MyServiceImpl => Instance(...) (scope: root)` - `[cache hit][CherryPick] MyService — MyServiceImpl (scope: root)` - `[cycle][CherryPick] Detected: A -> B -> C -> A (scope: root)` - `[error][CherryPick] Failed to resolve dependency` - `[diagnostic][CherryPick] Cache cleared` #### How it works `TalkerCherryPickObserver` implements `CherryPickObserver` and routes all methods/events to Talker: - Regular events: `.info()` - DI Warnings and cycles: `.warning()` - Diagnostics: `.verbose()` - Errors: `.handle()` (so they are visible in Talker error console, with stack trace) --- ## Extended example ```dart 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); // Optionally: customize Talker output or filtering // talker.settings.logLevel = TalkerLogLevel.debug; CherryPick.openRootScope(observer: observer); // ...setup your DI modules as usual // All container events will appear in Talker logs for easy debugging! } ``` --- ## Additional information - This package is especially useful for debugging large or layered projects using CherryPick. - For advanced Talker configurations (UI, outputs to remote, filtering), see the [Talker documentation](https://pub.dev/packages/talker). - This package does **not** interfere with DI graph construction or your app's behavior — it's purely diagnostic. - For questions or issues, open an issue on the main [cherrypick repository](https://github.com/pese-dot-work/cherrypick). --- ## Contributing Feel free to contribute improvements or report bugs via pull requests or issues! --- ## License See [LICENSE](LICENSE) for details.