1 module logger.consolelogger; 2 3 import std.experimental.logger; 4 import logger.extendedfilelogger; 5 6 /** 7 * A simple color mapping that sets: 8 * 9 * - all : White tint, black background 10 * - trace : White tint, black background 11 * - info : Green tint, black background 12 * - warning : Yellow tint, black background 13 * - error : Red tint, black background 14 * - critical : Underline bright red tint, black background 15 * - fatal : Black tint, bright red background 16 */ 17 enum string[LogLevel] defaultColorMap = [ 18 LogLevel.all: "\033[37;40m", 19 LogLevel.trace: "\033[37;40m", 20 LogLevel.info: "\033[32;40m", 21 LogLevel.warning: "\033[33;40m", 22 LogLevel.error: "\033[31;40m", 23 LogLevel.critical: "\033[4;91;40m", 24 LogLevel.fatal: "\033[30;101m" 25 ]; 26 27 /** 28 * ConfigurableLogPattern that colorizes log level with ANSI escape codes 29 */ 30 class ConfigurableAnsiLogPattern : ConfigurableLogPattern 31 { 32 private const string[LogLevel] colorMap; 33 34 /** 35 * Builds a configurable log pattern 36 * Params: 37 * colorMap = An dicctionary mapping loglevel to ANSI escape code. By default uses `defaultColorMap` 38 * logPattern = String pattern to apply. By default uses `simplePattern` 39 */ 40 this(const string[LogLevel] colorMap = defaultColorMap, string logPattern = simplePattern) 41 { 42 super(logPattern); 43 this.colorMap = colorMap; 44 } 45 46 /// string preceding loglevel. Usefull to colorize it, with ANSI 47 override 48 protected string logLevelPrefix(const LogLevel logLevel) { 49 return this.colorMap.get(logLevel, ""); 50 } 51 52 /// string following loglevel. Usefull to colorize it, with ANSI 53 override 54 protected string logLevelPostfix(const LogLevel logLevel) { 55 return "\033[0m"; 56 } 57 } 58 59 /// Extends PatternFileLogger to log only to stdout and to use by default ConfigurableAnsiLogPattern 60 class ConsoleLogger : ExtendedFileLogger 61 { 62 /** 63 * A constructor for the `FileLogger` Logger. 64 * Params: 65 * lv = The `LogLevel` for the `FileLogger`. By default is LogLevel.all 66 * logPattern = An implementation of the `ILogPattern`. By default uses ConfigurableAnsiLogPattern. 67 Example: 68 ------------- 69 auto l1 = new ConsoleLogger(); 70 auto l2 = new ConsoleLogger(LogLevel.fatal); 71 auto l3 = new ConsoleLogger(LogLevel.fatal, new SimpleLogPattern()); 72 ------------- 73 */ 74 this(const LogLevel lv = LogLevel.all, ILogPattern logPattern = new ConfigurableAnsiLogPattern()) 75 @trusted 76 { 77 import std.stdio : stdout; 78 super(stdout, lv, logPattern); 79 } 80 81 }