Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(769)

Unified Diff: pkg/logging/lib/logging.dart

Issue 12334093: pkg/logging: BREAKING: move to stream-based event model (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: keep old API, but deprecated Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/logging/test/logging_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/logging/lib/logging.dart
diff --git a/pkg/logging/lib/logging.dart b/pkg/logging/lib/logging.dart
index 935b3aeffec2b16d705fc10da992e149f9449e03..b222f0756670f198da51eaaf38949618e910e759 100644
--- a/pkg/logging/lib/logging.dart
+++ b/pkg/logging/lib/logging.dart
@@ -9,6 +9,10 @@
*/
library logging;
+import 'dart:async';
+
+import 'package:meta/meta.dart';
+
/**
* Whether to allow fine-grain logging and configuration of loggers in a
* hierarchy. When false, all logging is merged in the root logger.
@@ -44,7 +48,10 @@ class Logger {
Map<String, Logger> children;
/** Handlers used to process log entries in this logger. */
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 fix comment
- List<LoggerHandler> _handlers;
+ StreamController<LogRecord> _controller;
+
+ @deprecated
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 If you don't mind - let's remove this one here. We
+ Map<LoggerHandler, StreamSubscription> _deprecatedSubscriptions;
/**
* Singleton constructor. Calling `new Logger(name)` will return the same
@@ -110,37 +117,19 @@ class Logger {
* instance:
* logger.on.record.add((record) { ... });
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 + let's add a small comment here, like: Deprecate
*/
+ @deprecated
LoggerEvents get on => new LoggerEvents(this);
- /** Adds a handler to listen whenever a log record is added to this logger. */
- void _addHandler(LoggerHandler handler) {
- if (hierarchicalLoggingEnabled || parent == null) {
- if (_handlers == null) {
- _handlers = new List<LoggerHandler>();
- }
- _handlers.add(handler);
- } else {
- root._addHandler(handler);
- }
- }
-
- /** Remove a previously added handler. */
- void _removeHandler(LoggerHandler handler) {
- if (hierarchicalLoggingEnabled || parent == null) {
- if (_handlers == null) return;
- int index = _handlers.indexOf(handler);
- if (index != -1) _handlers.removeRange(index, 1);
- } else {
- root._removeHandler(handler);
- }
- }
+ Stream<LogRecord> get onRecord => _getStream();
- /** Removes all handlers previously added to this logger. */
- void _clearHandlers() {
- if (hierarchicalLoggingEnabled || parent == null) {
- _handlers = null;
+ void clearListeners() {
+ if(hierarchicalLoggingEnabled || parent == null) {
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 style: add space after 'if' (same here below)
+ if(_controller != null) {
+ _controller.close();
+ _controller = null;
+ }
} else {
- root._clearHandlers();
+ root.clearListeners();
}
}
@@ -194,9 +183,44 @@ class Logger {
/** Log message at level [Level.SHOUT]. */
void shout(String message) => log(Level.SHOUT, message);
+ /** Adds a handler to listen whenever a log record is added to this logger. */
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 move this comment down to _addHandler?
+ Stream<LogRecord> _getStream() {
+ if (hierarchicalLoggingEnabled || parent == null) {
+ if (_controller == null) {
+ _controller = new StreamController<LogRecord>.broadcast();
+ }
+ return _controller.stream;
+ } else {
+ return root._getStream();
+ }
+ }
+
+ @deprecated
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 same here and all the ones below (the user had to
+ void _addHandler(LoggerHandler handler) {
+ if(_deprecatedSubscriptions == null) {
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 style: missing space after 'if'
+ _deprecatedSubscriptions = new Map<LoggerHandler, StreamSubscription>();
+ }
+
+ final sub = onRecord.listen(handler);
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 style: even thought it's final, we use 'var' for t
+ _deprecatedSubscriptions[handler] = sub;
+ }
+
+ @deprecated
+ void _removeHandler(LoggerHandler handler) {
+ if(_deprecatedSubscriptions != null) {
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 style: space after if (same below)
+ final sub = _deprecatedSubscriptions.remove(handler);
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 style: final -> var
+ if(sub != null) {
+ sub.cancel();
+ }
+ if(_deprecatedSubscriptions.isEmpty) {
+ _deprecatedSubscriptions = null;
+ }
+ }
+ }
+
void _publish(LogRecord record) {
- if (_handlers != null) {
- _handlers.forEach((h) => h(record));
+ if (_controller != null) {
+ _controller.add(record);
}
}
@@ -209,10 +233,12 @@ class Logger {
/** Handler callback to process log entries as they are added to a [Logger]. */
+@deprecated
typedef void LoggerHandler(LogRecord);
/** Event manager for a [Logger] (holds events that a [Logger] can fire). */
+@deprecated
class LoggerEvents {
final Logger _logger;
@@ -224,6 +250,7 @@ class LoggerEvents {
/** List of handlers that will be called on a logger event. */
+@deprecated
Siggi Cherem (dart-lang) 2013/02/26 21:11:24 I doubt anyone will allocate these types directly
class LoggerHandlerList {
Logger _logger;
@@ -231,7 +258,7 @@ class LoggerHandlerList {
void add(LoggerHandler handler) => _logger._addHandler(handler);
void remove(LoggerHandler handler) => _logger._removeHandler(handler);
- void clear() => _logger._clearHandlers();
+ void clear() => _logger.clearListeners();
}
« no previous file with comments | « no previous file | pkg/logging/test/logging_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698