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