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

Side by Side Diff: pkg/logging/lib/logging.dart

Issue 420553007: updated logging package to accept functions or other non-string objects when logging (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: "bump version and add example for logging with a closure" Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/logging/README.md ('k') | pkg/logging/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 */ 6 */
7 library logging; 7 library logging;
8 8
9 import 'dart:async'; 9 import 'dart:async';
10 import 'dart:collection'; 10 import 'dart:collection';
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 /** Whether a message for [value]'s level is loggable in this logger. */ 127 /** Whether a message for [value]'s level is loggable in this logger. */
128 bool isLoggable(Level value) => (value >= level); 128 bool isLoggable(Level value) => (value >= level);
129 129
130 /** 130 /**
131 * Adds a log record for a [message] at a particular [logLevel] if 131 * Adds a log record for a [message] at a particular [logLevel] if
132 * `isLoggable(logLevel)` is true. 132 * `isLoggable(logLevel)` is true.
133 * 133 *
134 * Use this method to create log entries for user-defined levels. To record a 134 * Use this method to create log entries for user-defined levels. To record a
135 * message at a predefined level (e.g. [Level.INFO], [Level.WARNING], etc) you 135 * message at a predefined level (e.g. [Level.INFO], [Level.WARNING], etc) you
136 * can use their specialized methods instead (e.g. [info], [warning], etc). 136 * can use their specialized methods instead (e.g. [info], [warning], etc).
137 *
138 * If [message] is a [Function], it will be lazy evaluated. Additionally, if
139 * [message] or its evaluated value is not a [String], then 'toString()' will
140 * be called on it and the result will be logged.
137 */ 141 */
138 void log(Level logLevel, String message, [Object error, 142 void log(Level logLevel, message, [Object error, StackTrace stackTrace]) {
139 StackTrace stackTrace]) {
140 if (isLoggable(logLevel)) { 143 if (isLoggable(logLevel)) {
144 // If message is a Function, evaluate it.
145 if (message is Function) message = message();
146 // If message is still not a String, call toString().
147 if (message is! String) message = message.toString();
148
141 var record = new LogRecord(logLevel, message, fullName, error, 149 var record = new LogRecord(logLevel, message, fullName, error,
142 stackTrace); 150 stackTrace);
143 151
144 if (hierarchicalLoggingEnabled) { 152 if (hierarchicalLoggingEnabled) {
145 var target = this; 153 var target = this;
146 while (target != null) { 154 while (target != null) {
147 target._publish(record); 155 target._publish(record);
148 target = target.parent; 156 target = target.parent;
149 } 157 }
150 } else { 158 } else {
151 root._publish(record); 159 root._publish(record);
152 } 160 }
153 } 161 }
154 } 162 }
155 163
156 /** Log message at level [Level.FINEST]. */ 164 /** Log message at level [Level.FINEST]. */
157 void finest(String message, [Object error, StackTrace stackTrace]) => 165 void finest(message, [Object error, StackTrace stackTrace]) =>
158 log(Level.FINEST, message, error, stackTrace); 166 log(Level.FINEST, message, error, stackTrace);
159 167
160 /** Log message at level [Level.FINER]. */ 168 /** Log message at level [Level.FINER]. */
161 void finer(String message, [Object error, StackTrace stackTrace]) => 169 void finer(message, [Object error, StackTrace stackTrace]) =>
162 log(Level.FINER, message, error, stackTrace); 170 log(Level.FINER, message, error, stackTrace);
163 171
164 /** Log message at level [Level.FINE]. */ 172 /** Log message at level [Level.FINE]. */
165 void fine(String message, [Object error, StackTrace stackTrace]) => 173 void fine(message, [Object error, StackTrace stackTrace]) =>
166 log(Level.FINE, message, error, stackTrace); 174 log(Level.FINE, message, error, stackTrace);
167 175
168 /** Log message at level [Level.CONFIG]. */ 176 /** Log message at level [Level.CONFIG]. */
169 void config(String message, [Object error, StackTrace stackTrace]) => 177 void config(message, [Object error, StackTrace stackTrace]) =>
170 log(Level.CONFIG, message, error, stackTrace); 178 log(Level.CONFIG, message, error, stackTrace);
171 179
172 /** Log message at level [Level.INFO]. */ 180 /** Log message at level [Level.INFO]. */
173 void info(String message, [Object error, StackTrace stackTrace]) => 181 void info(message, [Object error, StackTrace stackTrace]) =>
174 log(Level.INFO, message, error, stackTrace); 182 log(Level.INFO, message, error, stackTrace);
175 183
176 /** Log message at level [Level.WARNING]. */ 184 /** Log message at level [Level.WARNING]. */
177 void warning(String message, [Object error, StackTrace stackTrace]) => 185 void warning(message, [Object error, StackTrace stackTrace]) =>
178 log(Level.WARNING, message, error, stackTrace); 186 log(Level.WARNING, message, error, stackTrace);
179 187
180 /** Log message at level [Level.SEVERE]. */ 188 /** Log message at level [Level.SEVERE]. */
181 void severe(String message, [Object error, StackTrace stackTrace]) => 189 void severe(message, [Object error, StackTrace stackTrace]) =>
182 log(Level.SEVERE, message, error, stackTrace); 190 log(Level.SEVERE, message, error, stackTrace);
183 191
184 /** Log message at level [Level.SHOUT]. */ 192 /** Log message at level [Level.SHOUT]. */
185 void shout(String message, [Object error, StackTrace stackTrace]) => 193 void shout(message, [Object error, StackTrace stackTrace]) =>
186 log(Level.SHOUT, message, error, stackTrace); 194 log(Level.SHOUT, message, error, stackTrace);
187 195
188 Stream<LogRecord> _getStream() { 196 Stream<LogRecord> _getStream() {
189 if (hierarchicalLoggingEnabled || parent == null) { 197 if (hierarchicalLoggingEnabled || parent == null) {
190 if (_controller == null) { 198 if (_controller == null) {
191 _controller = new StreamController<LogRecord>.broadcast(sync: true); 199 _controller = new StreamController<LogRecord>.broadcast(sync: true);
192 } 200 }
193 return _controller.stream; 201 return _controller.stream;
194 } else { 202 } else {
195 return root._getStream(); 203 return root._getStream();
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 /** Associated stackTrace (if any) when recording errors messages. */ 314 /** Associated stackTrace (if any) when recording errors messages. */
307 final StackTrace stackTrace; 315 final StackTrace stackTrace;
308 316
309 LogRecord(this.level, this.message, this.loggerName, [this.error, 317 LogRecord(this.level, this.message, this.loggerName, [this.error,
310 this.stackTrace]) 318 this.stackTrace])
311 : time = new DateTime.now(), 319 : time = new DateTime.now(),
312 sequenceNumber = LogRecord._nextNumber++; 320 sequenceNumber = LogRecord._nextNumber++;
313 321
314 String toString() => '[${level.name}] $loggerName: $message'; 322 String toString() => '[${level.name}] $loggerName: $message';
315 } 323 }
OLDNEW
« no previous file with comments | « pkg/logging/README.md ('k') | pkg/logging/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698