1 module gfm.logger.log; 2 3 import std.stream, 4 std.string; 5 6 import std.experimental.logger; 7 import colorize; 8 9 /// Coloured console logger. 10 class ConsoleLogger : Logger 11 { 12 public 13 { 14 this() 15 { 16 super(LogLevel.info); 17 } 18 19 override protected void writeLogMsg(ref LogEntry payload) @trusted 20 { 21 LogLevel logLevel; 22 23 auto foregroundColor = fg.white; 24 switch(payload.logLevel) 25 { 26 case LogLevel.info: 27 foregroundColor = fg.light_white; 28 break; 29 30 case LogLevel.warning: 31 foregroundColor = fg.light_yellow; 32 break; 33 34 case LogLevel.error: 35 case LogLevel.critical: 36 case LogLevel.fatal: 37 foregroundColor = fg.light_red; 38 break; 39 40 case LogLevel.trace: 41 default: 42 foregroundColor = fg.white; 43 } 44 45 import colorize.cwrite; 46 cwritefln( color("%s: %s", foregroundColor), logLevelToString(payload.logLevel), payload.msg); 47 } 48 49 ~this() 50 { 51 } 52 } 53 54 private 55 { 56 static pure string logLevelToString(const LogLevel lv) 57 { 58 switch(lv) 59 { 60 case LogLevel.trace: 61 return "trace"; 62 case LogLevel.info: 63 return "info"; 64 case LogLevel.warning: 65 return "warning"; 66 case LogLevel.error: 67 return "error"; 68 case LogLevel.critical: 69 return "critical"; 70 case LogLevel.fatal: 71 return "fatal"; 72 default: 73 assert(false); 74 } 75 } 76 } 77 }