mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-23 21:13:35 +00:00
refactor(core,logger)migrate to CherryPickObserver API and drop CherryPickLogger
BREAKING CHANGE: - Removed the deprecated CherryPickLogger interface from cherrypick - Logger/adapters (e.g., talker_cherrypick_logger) must now implement CherryPickObserver - talker_cherrypick_logger: replace TalkerCherryPickLogger with TalkerCherryPickObserver - All usages, docs, tests migrated to observer API - Improved test mocks and integration tests for observer pattern - Removed obsolete files: cherrypick/src/logger.dart, talker_cherrypick_logger/src/talker_cherrypick_logger.dart - Updated README and example usages for new CherryPickObserver model This refactor introduces a unified observer pattern (CherryPickObserver) to handle all DI lifecycle events, replacing the limited info/warn/error logger pattern. All external logging adapters and integrations must migrate to use CherryPickObserver.
This commit is contained in:
@@ -3,11 +3,11 @@ import 'package:talker/talker.dart';
|
||||
|
||||
void main() {
|
||||
final talker = Talker();
|
||||
final logger = TalkerCherryPickLogger(talker);
|
||||
final logger = TalkerCherryPickObserver(talker);
|
||||
|
||||
logger.info('Hello from CherryPickLogger!');
|
||||
logger.warn('Something might be wrong...');
|
||||
logger.error('Oops! An error occurred', Exception('Test error'));
|
||||
logger.onDiagnostic('Hello from CherryPickLogger!');
|
||||
logger.onWarning('Something might be wrong...');
|
||||
logger.onError('Oops! An error occurred', Exception('Test error'), null);
|
||||
|
||||
// Вывод всех логов
|
||||
print('\nВсе сообщения логирования через Talker:');
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
import 'package:cherrypick/cherrypick.dart';
|
||||
import 'package:talker/talker.dart';
|
||||
|
||||
/// Реализация CherryPickLogger для логирования через Talker
|
||||
class TalkerCherryPickLogger implements CherryPickLogger {
|
||||
final Talker talker;
|
||||
|
||||
TalkerCherryPickLogger(this.talker);
|
||||
|
||||
@override
|
||||
void info(String message) => talker.info('[CherryPick] $message');
|
||||
|
||||
@override
|
||||
void warn(String message) => talker.warning('[CherryPick] $message');
|
||||
|
||||
@override
|
||||
void error(String message, [Object? error, StackTrace? stackTrace]) {
|
||||
talker.handle(
|
||||
error ?? '[CherryPick] $message',
|
||||
stackTrace,
|
||||
'[CherryPick] $message',
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import 'package:cherrypick/cherrypick.dart';
|
||||
import 'package:talker/talker.dart';
|
||||
|
||||
/// CherryPickObserver-адаптер для логирования событий CherryPick через Talker
|
||||
class TalkerCherryPickObserver implements CherryPickObserver {
|
||||
final Talker talker;
|
||||
|
||||
TalkerCherryPickObserver(this.talker);
|
||||
|
||||
@override
|
||||
void onBindingRegistered(String name, Type type, {String? scopeName}) {
|
||||
talker.info('[binding][CherryPick] $name — $type (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onInstanceRequested(String name, Type type, {String? scopeName}) {
|
||||
talker.info('[request][CherryPick] $name — $type (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onInstanceCreated(String name, Type type, Object instance, {String? scopeName}) {
|
||||
talker.info('[create][CherryPick] $name — $type => $instance (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onInstanceDisposed(String name, Type type, Object instance, {String? scopeName}) {
|
||||
talker.info('[dispose][CherryPick] $name — $type => $instance (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onModulesInstalled(List<String> modules, {String? scopeName}) {
|
||||
talker.info('[modules installed][CherryPick] ${modules.join(', ')} (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onModulesRemoved(List<String> modules, {String? scopeName}) {
|
||||
talker.info('[modules removed][CherryPick] ${modules.join(', ')} (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onScopeOpened(String name) {
|
||||
talker.info('[scope opened][CherryPick] $name');
|
||||
}
|
||||
@override
|
||||
void onScopeClosed(String name) {
|
||||
talker.info('[scope closed][CherryPick] $name');
|
||||
}
|
||||
@override
|
||||
void onCycleDetected(List<String> chain, {String? scopeName}) {
|
||||
talker.warning('[cycle][CherryPick] Detected: ${chain.join(' -> ')}${scopeName != null ? ' (scope: $scopeName)' : ''}');
|
||||
}
|
||||
@override
|
||||
void onCacheHit(String name, Type type, {String? scopeName}) {
|
||||
talker.info('[cache hit][CherryPick] $name — $type (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onCacheMiss(String name, Type type, {String? scopeName}) {
|
||||
talker.info('[cache miss][CherryPick] $name — $type (scope: $scopeName)');
|
||||
}
|
||||
@override
|
||||
void onDiagnostic(String message, {Object? details}) {
|
||||
talker.verbose('[diagnostic][CherryPick] $message ${details ?? ''}');
|
||||
}
|
||||
@override
|
||||
void onWarning(String message, {Object? details}) {
|
||||
talker.warning('[warn][CherryPick] $message ${details ?? ''}');
|
||||
}
|
||||
@override
|
||||
void onError(String message, Object? error, StackTrace? stackTrace) {
|
||||
talker.handle(error ?? '[CherryPick] $message', stackTrace, '[error][CherryPick] $message');
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,6 @@
|
||||
/// More dartdocs go here.
|
||||
library;
|
||||
|
||||
export 'src/talker_cherrypick_logger.dart';
|
||||
export 'src/talker_cherrypick_observer.dart';
|
||||
|
||||
// TODO: Export any libraries intended for clients of this package.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
name: talker_cherrypick_logger
|
||||
description: A starting point for Dart libraries or applications.
|
||||
version: 1.0.0
|
||||
publish_to: none
|
||||
# repository: https://github.com/my_org/my_repo
|
||||
|
||||
environment:
|
||||
|
||||
@@ -3,38 +3,44 @@ import 'package:talker/talker.dart';
|
||||
import 'package:talker_cherrypick_logger/talker_cherrypick_logger.dart';
|
||||
|
||||
void main() {
|
||||
group('TalkerCherryPickLogger', () {
|
||||
group('TalkerCherryPickObserver', () {
|
||||
late Talker talker;
|
||||
late TalkerCherryPickLogger logger;
|
||||
late TalkerCherryPickObserver observer;
|
||||
|
||||
setUp(() {
|
||||
talker = Talker();
|
||||
logger = TalkerCherryPickLogger(talker);
|
||||
observer = TalkerCherryPickObserver(talker);
|
||||
});
|
||||
|
||||
test('logs info messages correctly', () {
|
||||
logger.info('Test info');
|
||||
test('onInstanceRequested logs info', () {
|
||||
observer.onInstanceRequested('A', String, scopeName: 'test');
|
||||
final log = talker.history.last;
|
||||
expect(log.message, contains('[CherryPick] Test info'));
|
||||
//xpect(log.level, TalkerLogLevel.info);
|
||||
expect(log.message, contains('[request][CherryPick] A — String (scope: test)'));
|
||||
});
|
||||
|
||||
test('logs warning messages correctly', () {
|
||||
logger.warn('Danger!');
|
||||
test('onCycleDetected logs warning', () {
|
||||
observer.onCycleDetected(['A', 'B'], scopeName: 's');
|
||||
final log = talker.history.last;
|
||||
expect(log.message, contains('[CherryPick] Danger!'));
|
||||
expect(log.message, contains('[cycle][CherryPick] Detected'));
|
||||
//expect(log.level, TalkerLogLevel.warning);
|
||||
});
|
||||
|
||||
test('logs error messages correctly', () {
|
||||
final error = Exception('some error');
|
||||
test('onError calls handle', () {
|
||||
final error = Exception('fail');
|
||||
final stack = StackTrace.current;
|
||||
logger.error('ERR', error, stack);
|
||||
observer.onError('Oops', error, stack);
|
||||
final log = talker.history.last;
|
||||
//expect(log.level, TalkerLogLevel.error);
|
||||
expect(log.message, contains('[CherryPick] ERR'));
|
||||
expect(log.message, contains('[error][CherryPick] Oops'));
|
||||
expect(log.exception, error);
|
||||
expect(log.stackTrace, stack);
|
||||
});
|
||||
|
||||
test('onDiagnostic logs verbose', () {
|
||||
observer.onDiagnostic('hello', details: 123);
|
||||
final log = talker.history.last;
|
||||
//expect(log.level, TalkerLogLevel.verbose);
|
||||
expect(log.message, contains('hello'));
|
||||
expect(log.message, contains('123'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user