annotate doodle/core/logging.d @ 58:c63719604adb

Beginnings of creating a rectangle...
author "David Bryant <bagnose@gmail.com>"
date Mon, 09 Aug 2010 21:43:24 +0930
parents 0eaf39fda206
children 523269b36711 ab745d8b10e5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
1 module doodle.core.logging;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
2
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
3 private {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
4 import std.stdio;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
5 import std.typecons;
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
6 import std.traits;
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
7 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
8
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
9 public {
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
10 void trace(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
11 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
12 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
13 log(Severity.TRACE,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
14 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
15 }
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
16
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
17 void info(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
18 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
19 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
20 log(Severity.INFO,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
21 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
22 }
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
23
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
24 void message(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
25 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
26 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
27 log(Severity.MESSAGE,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
28 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29 }
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
30
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
31 void warning(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
32 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
33 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
34 log(Severity.WARNING,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
35 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
36 }
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
37
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
38 void error(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
39 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
40 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
41 log(Severity.ERROR,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
42 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 }
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
44
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
45 void fatal(string file = __FILE__, int line = __LINE__, S...)(S args) {
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
46 static assert(S.length > 0);
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
47 static assert(isSomeString!(S[0]));
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
48 log(Severity.FATAL,
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
49 std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, std.string.format(args)));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50 assert(0);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54 private {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 mixin(defineEnum!("Severity",
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 "TRACE", "INFO", "MESSAGE", "WARNING", "ERROR", "FATAL"));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
58 string severityString(in Severity s) {
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59 switch (s) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 case Severity.TRACE:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
61 return modifierString(Modifier.DIM) ~ fgColorString(Color.CYAN);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 case Severity.INFO:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
63 return modifierString(Modifier.UNDERLINE) ~ fgColorString(Color.GREEN);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 case Severity.MESSAGE:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
65 return fgColorString(Color.YELLOW);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 case Severity.WARNING:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
67 return modifierString(Modifier.BRIGHT) ~ fgColorString(Color.MAGENTA);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 case Severity.ERROR:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
69 return modifierString(Modifier.BRIGHT) ~ fgColorString(Color.RED);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 case Severity.FATAL:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
71 return modifierString(Modifier.BRIGHT) ~ bgColorString(Color.RED) ~ fgColorString(Color.WHITE);
40
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
72 default:
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
73 assert(0);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75 assert(0);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78 void log(in Severity severity, in string message) {
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
79 writeln(severityString(severity), message, modifierString(Modifier.RESET));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
80 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
81
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 enum Modifier {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 RESET = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84 BRIGHT = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 DIM = 2, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 UNDERLINE = 3, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87 BLINK = 5, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 REVERSE = 7,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 HIDDEN = 8
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92 enum Color {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93 BLACK = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 RED = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95 GREEN = 2,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 YELLOW = 3,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
97 BLUE = 4,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
98 MAGENTA = 5,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
99 CYAN = 6,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
100 WHITE = 7
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
101 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
102
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
103 string modifierString(in Modifier m) { return std.string.format("\033[%dm", 0 + m); }
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
104 string fgColorString(in Color c) { return std.string.format("\033[%dm", 30 + c); }
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
105 string bgColorString(in Color c) { return std.string.format("\033[%dm", 40 + c); }
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
106
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
107 private string right(in string str, in int n) {
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
108 int pos = str.length < n ? 0 : str.length - n;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
109 return str[pos..$];
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
110 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
111 }