commit | 2793b04efaa403b79ded78411439a56df7011d66 | [log] [tgz] |
---|---|---|
author | Anton Astashov <anton.astashov@gmail.com> | Wed Sep 30 17:46:11 2015 -0500 |
committer | Anton Astashov <anton.astashov@gmail.com> | Thu Oct 01 14:26:49 2015 -0500 |
tree | ff18e0f579998b67f94beb1e9d9555e87a258889 | |
parent | 4c2e9fd8b6c88d9529f72808f9c5ac4db8ec732a [diff] |
Add Logger.detached factory Sometimes you just don't need to add a logger, which will be a singleton and part of the global loggers tree. So, just a logger, which will be garbage collected, and its onRecord.listen won't subscribe to the root one. Right now, there is theoretical possibility for that, but a constructor for that is private. Added Logger.detached factory, which is doing exactly this.
By default, the logging package does not do anything useful with the log messages. You must configure the logging level and add a handler for the log messages.
Here is a simple logging configuration that logs all messages via print
.
Logger.root.level = Level.ALL; Logger.root.onRecord.listen((LogRecord rec) { print('${rec.level.name}: ${rec.time}: ${rec.message}'); });
First, set the root [Level]. All messages at or above the level are sent to the [onRecord] stream.
Then, listen on the [onRecord] stream for [LogRecord] events. The [LogRecord] class has various properties for the message, error, logger name, and more.
Create a [Logger] with a unique name to easily identify the source of the log messages.
final Logger log = new Logger('MyClassName');
Here is an example of logging a debug message and an error:
var future = doSomethingAsync().then((result) { log.fine('Got the result: $result'); processResult(result); }).catchError((e, stackTrace) => log.severe('Oh noes!', e, stackTrace));
When logging more complex messages, you can pass a closure instead that will be evaluated only if the message is actually logged:
log.fine(() => [1, 2, 3, 4, 5].map((e) => e * 4).join("-"));
See the [Logger] class for the different logging methods.