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(); |
} |