Chromium Code Reviews| 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, StackTrace stackTrace) { | |
| 20 if (error == null) return msg; | |
| 21 msg += ": $error\n$stackTrace"; | |
|
Johnni Winther
2017/08/23 12:40:47
Support nice printing of an error without a stack
| |
| 22 return msg; | |
| 23 } | |
| 24 | |
| 25 class StdOutLogger extends Logger { | |
| 26 StdOutLogger(Level level) : super(level); | |
| 27 | |
| 28 @override | |
| 29 void info(String msg, [error, stackTrace]) { | |
| 30 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 31 _print(Level.info, "$_datetime Info: $msg"); | |
| 32 } | |
| 33 | |
| 34 @override | |
| 35 void warning(String msg, [error, stackTrace]) { | |
| 36 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 37 _print(Level.warning, "$_datetime Warning: $msg"); | |
| 38 } | |
| 39 | |
| 40 @override | |
| 41 void error(String msg, [error, stackTrace]) { | |
| 42 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 43 _print(Level.error, "$_datetime Error: $msg"); | |
| 44 } | |
| 45 | |
| 46 @override | |
| 47 void debug(String msg, [error, stackTrace]) { | |
| 48 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 49 _print(Level.debug, "$_datetime Debug: $msg"); | |
| 50 } | |
| 51 | |
| 52 void _print(Level logLevel, String msg) { | |
| 53 if (logLevel.index >= level.index) { | |
| 54 print(msg); | |
| 55 } | |
| 56 } | |
| 57 | |
| 58 @override | |
| 59 void destroy() { | |
| 60 // nothing to do | |
| 61 } | |
| 62 | |
| 63 String get _datetime => "${new DateTime.now()}"; | |
| 64 } | |
| 65 | |
| 66 class FileLogger extends Logger { | |
| 67 IOSink _sink; | |
| 68 | |
| 69 FileLogger(String fileName, Level level, {bool append: false}) | |
| 70 : super(level) { | |
| 71 var mode = append ? FileMode.APPEND : FileMode.WRITE; | |
| 72 _sink = new File(path.absolute(fileName)).openWrite(mode: mode); | |
| 73 } | |
| 74 | |
| 75 @override | |
| 76 void destroy() { | |
| 77 if (_sink != null) { | |
| 78 _sink.close(); | |
| 79 _sink = null; | |
| 80 } | |
| 81 } | |
| 82 | |
| 83 @override | |
| 84 void info(String msg, [error, stackTrace]) { | |
| 85 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 86 _print(Level.info, "$_datetime Info: $msg"); | |
| 87 } | |
| 88 | |
| 89 @override | |
| 90 void warning(String msg, [error, stackTrace]) { | |
| 91 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 92 _print(Level.warning, "$_datetime Warning: $msg"); | |
| 93 } | |
| 94 | |
| 95 @override | |
| 96 void error(String msg, [error, stackTrace]) { | |
| 97 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 98 _print(Level.error, "$_datetime Error: $msg"); | |
| 99 } | |
| 100 | |
| 101 @override | |
| 102 void debug(String msg, [error, stackTrace]) { | |
| 103 msg = _formatErrorMessage(msg, error, stackTrace); | |
| 104 _print(Level.debug, "$_datetime Debug: $msg"); | |
| 105 } | |
| 106 | |
| 107 void _print(Level logLevel, String msg) { | |
| 108 if (logLevel.index >= level.index && _sink != null) _sink.writeln(msg); | |
| 109 } | |
| 110 | |
| 111 static String get _datetime => "${new DateTime.now()}"; | |
| 112 } | |
| OLD | NEW |