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