| OLD | NEW |
| 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 * Provides APIs for debugging and error logging. This library introduces | 6 * Provides APIs for debugging and error logging. This library introduces |
| 7 * abstractions similar to those used in other languages, such as the Closure JS | 7 * abstractions similar to those used in other languages, such as the Closure JS |
| 8 * Logger and java.util.logging.Logger. | 8 * Logger and java.util.logging.Logger. |
| 9 * | 9 * |
| 10 * ## Installing ## | 10 * ## Installing ## |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 /** Whether a message for [value]'s level is loggable in this logger. */ | 146 /** Whether a message for [value]'s level is loggable in this logger. */ |
| 147 bool isLoggable(Level value) => (value >= level); | 147 bool isLoggable(Level value) => (value >= level); |
| 148 | 148 |
| 149 /** | 149 /** |
| 150 * Adds a log record for a [message] at a particular [logLevel] if | 150 * Adds a log record for a [message] at a particular [logLevel] if |
| 151 * `isLoggable(logLevel)` is true. Use this method to create log entries for | 151 * `isLoggable(logLevel)` is true. Use this method to create log entries for |
| 152 * user-defined levels. To record a message at a predefined level (e.g. | 152 * user-defined levels. To record a message at a predefined level (e.g. |
| 153 * [Level.INFO], [Level.WARNING], etc) you can use their specialized methods | 153 * [Level.INFO], [Level.WARNING], etc) you can use their specialized methods |
| 154 * instead (e.g. [info], [warning], etc). | 154 * instead (e.g. [info], [warning], etc). |
| 155 */ | 155 */ |
| 156 // TODO(sigmund): add support for logging exceptions. | 156 void log(Level logLevel, String message, [exception]) { |
| 157 void log(Level logLevel, String message) { | |
| 158 if (isLoggable(logLevel)) { | 157 if (isLoggable(logLevel)) { |
| 159 var record = new LogRecord(logLevel, message, fullName); | 158 var record = new LogRecord(logLevel, message, fullName, exception); |
| 160 if (hierarchicalLoggingEnabled) { | 159 if (hierarchicalLoggingEnabled) { |
| 161 var target = this; | 160 var target = this; |
| 162 while (target != null) { | 161 while (target != null) { |
| 163 target._publish(record); | 162 target._publish(record); |
| 164 target = target.parent; | 163 target = target.parent; |
| 165 } | 164 } |
| 166 } else { | 165 } else { |
| 167 root._publish(record); | 166 root._publish(record); |
| 168 } | 167 } |
| 169 } | 168 } |
| 170 } | 169 } |
| 171 | 170 |
| 172 /** Log message at level [Level.FINEST]. */ | 171 /** Log message at level [Level.FINEST]. */ |
| 173 void finest(String message) => log(Level.FINEST, message); | 172 void finest(String message, [exception]) => |
| 173 log(Level.FINEST, message, exception); |
| 174 | 174 |
| 175 /** Log message at level [Level.FINER]. */ | 175 /** Log message at level [Level.FINER]. */ |
| 176 void finer(String message) => log(Level.FINER, message); | 176 void finer(String message, [exception]) => |
| 177 log(Level.FINER, message, exception); |
| 177 | 178 |
| 178 /** Log message at level [Level.FINE]. */ | 179 /** Log message at level [Level.FINE]. */ |
| 179 void fine(String message) => log(Level.FINE, message); | 180 void fine(String message, [exception]) => |
| 181 log(Level.FINE, message, exception); |
| 180 | 182 |
| 181 /** Log message at level [Level.CONFIG]. */ | 183 /** Log message at level [Level.CONFIG]. */ |
| 182 void config(String message) => log(Level.CONFIG, message); | 184 void config(String message, [exception]) => |
| 185 log(Level.CONFIG, message, exception); |
| 183 | 186 |
| 184 /** Log message at level [Level.INFO]. */ | 187 /** Log message at level [Level.INFO]. */ |
| 185 void info(String message) => log(Level.INFO, message); | 188 void info(String message, [exception]) => |
| 189 log(Level.INFO, message, exception); |
| 186 | 190 |
| 187 /** Log message at level [Level.WARNING]. */ | 191 /** Log message at level [Level.WARNING]. */ |
| 188 void warning(String message) => log(Level.WARNING, message); | 192 void warning(String message, [exception]) => |
| 193 log(Level.WARNING, message, exception); |
| 189 | 194 |
| 190 /** Log message at level [Level.SEVERE]. */ | 195 /** Log message at level [Level.SEVERE]. */ |
| 191 void severe(String message) => log(Level.SEVERE, message); | 196 void severe(String message, [exception]) => |
| 197 log(Level.SEVERE, message, exception); |
| 192 | 198 |
| 193 /** Log message at level [Level.SHOUT]. */ | 199 /** Log message at level [Level.SHOUT]. */ |
| 194 void shout(String message) => log(Level.SHOUT, message); | 200 void shout(String message, [exception]) => |
| 201 log(Level.SHOUT, message, exception); |
| 195 | 202 |
| 196 Stream<LogRecord> _getStream() { | 203 Stream<LogRecord> _getStream() { |
| 197 if (hierarchicalLoggingEnabled || parent == null) { | 204 if (hierarchicalLoggingEnabled || parent == null) { |
| 198 if (_controller == null) { | 205 if (_controller == null) { |
| 199 _controller = new StreamController<LogRecord>(sync: true); | 206 _controller = new StreamController<LogRecord>(sync: true); |
| 200 _stream = _controller.stream.asBroadcastStream(); | 207 _stream = _controller.stream.asBroadcastStream(); |
| 201 } | 208 } |
| 202 return _stream; | 209 return _stream; |
| 203 } else { | 210 } else { |
| 204 return root._getStream(); | 211 return root._getStream(); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 | 308 |
| 302 /** Time when this record was created. */ | 309 /** Time when this record was created. */ |
| 303 final DateTime time; | 310 final DateTime time; |
| 304 | 311 |
| 305 /** Unique sequence number greater than all log records created before it. */ | 312 /** Unique sequence number greater than all log records created before it. */ |
| 306 final int sequenceNumber; | 313 final int sequenceNumber; |
| 307 | 314 |
| 308 static int _nextNumber = 0; | 315 static int _nextNumber = 0; |
| 309 | 316 |
| 310 /** Associated exception (if any) when recording errors messages. */ | 317 /** Associated exception (if any) when recording errors messages. */ |
| 311 Exception exception; | 318 var exception; |
| 312 | 319 |
| 313 /** Associated exception message (if any) when recording errors messages. */ | 320 LogRecord(this.level, this.message, this.loggerName, [this.exception]) |
| 314 String exceptionText; | 321 : time = new DateTime.now(), |
| 315 | 322 sequenceNumber = LogRecord._nextNumber++; |
| 316 LogRecord( | |
| 317 this.level, this.message, this.loggerName, | |
| 318 [time, this.exception, this.exceptionText]) : | |
| 319 this.time = (time == null) ? new DateTime.now() : time, | |
| 320 this.sequenceNumber = LogRecord._nextNumber++; | |
| 321 } | 323 } |
| OLD | NEW |