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 }