OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 import 'dart:io'; |
| 6 import 'package:path/path.dart' as path; |
| 7 |
| 8 enum Level { debug, info, warning, error } |
| 9 |
| 10 abstract class Logger { |
| 11 Level level; |
| 12 |
| 13 Logger(this.level); |
| 14 |
| 15 void info(String msg, [Error, StackTrace]); |
| 16 void warning(String msg, [Error, StackTrace]); |
| 17 void error(String msg, [Error, StackTrace]); |
| 18 void debug(String msg, [Error, StackTrace]); |
| 19 |
| 20 void destroy(); |
| 21 } |
| 22 |
| 23 String _formatErrorMessage(String msg, Exception error, |
| 24 [StackTrace stackTrace]) { |
| 25 if (error == null) return msg; |
| 26 if (stackTrace == null) return msg + ": $error"; |
| 27 return msg + ": $error\n$stackTrace"; |
| 28 } |
| 29 |
| 30 class StdOutLogger extends Logger { |
| 31 StdOutLogger(Level level) : super(level); |
| 32 |
| 33 @override |
| 34 void info(String msg, [error, stackTrace]) { |
| 35 msg = _formatErrorMessage(msg, error, stackTrace); |
| 36 _print(Level.info, "$_datetime Info: $msg"); |
| 37 } |
| 38 |
| 39 @override |
| 40 void warning(String msg, [error, stackTrace]) { |
| 41 msg = _formatErrorMessage(msg, error, stackTrace); |
| 42 _print(Level.warning, "$_datetime Warning: $msg"); |
| 43 } |
| 44 |
| 45 @override |
| 46 void error(String msg, [error, stackTrace]) { |
| 47 msg = _formatErrorMessage(msg, error, stackTrace); |
| 48 _print(Level.error, "$_datetime Error: $msg"); |
| 49 } |
| 50 |
| 51 @override |
| 52 void debug(String msg, [error, stackTrace]) { |
| 53 msg = _formatErrorMessage(msg, error, stackTrace); |
| 54 _print(Level.debug, "$_datetime Debug: $msg"); |
| 55 } |
| 56 |
| 57 void _print(Level logLevel, String msg) { |
| 58 if (logLevel.index >= level.index) { |
| 59 print(msg); |
| 60 } |
| 61 } |
| 62 |
| 63 @override |
| 64 void destroy() { |
| 65 // nothing to do |
| 66 } |
| 67 |
| 68 String get _datetime => "${new DateTime.now()}"; |
| 69 } |
| 70 |
| 71 class FileLogger extends Logger { |
| 72 IOSink _sink; |
| 73 |
| 74 FileLogger(String fileName, Level level, {bool append: false}) |
| 75 : super(level) { |
| 76 var mode = append ? FileMode.APPEND : FileMode.WRITE; |
| 77 _sink = new File(path.absolute(fileName)).openWrite(mode: mode); |
| 78 } |
| 79 |
| 80 @override |
| 81 void destroy() { |
| 82 if (_sink != null) { |
| 83 _sink.close(); |
| 84 _sink = null; |
| 85 } |
| 86 } |
| 87 |
| 88 @override |
| 89 void info(String msg, [error, stackTrace]) { |
| 90 msg = _formatErrorMessage(msg, error, stackTrace); |
| 91 _print(Level.info, "$_datetime Info: $msg"); |
| 92 } |
| 93 |
| 94 @override |
| 95 void warning(String msg, [error, stackTrace]) { |
| 96 msg = _formatErrorMessage(msg, error, stackTrace); |
| 97 _print(Level.warning, "$_datetime Warning: $msg"); |
| 98 } |
| 99 |
| 100 @override |
| 101 void error(String msg, [error, stackTrace]) { |
| 102 msg = _formatErrorMessage(msg, error, stackTrace); |
| 103 _print(Level.error, "$_datetime Error: $msg"); |
| 104 } |
| 105 |
| 106 @override |
| 107 void debug(String msg, [error, stackTrace]) { |
| 108 msg = _formatErrorMessage(msg, error, stackTrace); |
| 109 _print(Level.debug, "$_datetime Debug: $msg"); |
| 110 } |
| 111 |
| 112 void _print(Level logLevel, String msg) { |
| 113 if (logLevel.index >= level.index && _sink != null) _sink.writeln(msg); |
| 114 } |
| 115 |
| 116 static String get _datetime => "${new DateTime.now()}"; |
| 117 } |
OLD | NEW |