annotate doodle/core/logging.d @ 105:7abaf5c3959f

Merge
author David Bryant <bagnose@gmail.com>
date Sun, 20 Feb 2011 22:27:06 +1030
parents ab745d8b10e5 523269b36711
children
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 {
104
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
55 enum Severity {
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
56 TRACE,
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
57 INFO,
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
58 MESSAGE,
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
59 WARNING,
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
60 ERROR,
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
61 FATAL
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
62 };
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
64 string severityString(in Severity s) {
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 switch (s) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 case Severity.TRACE:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
67 return modifierString(Modifier.DIM) ~ fgColorString(Color.CYAN);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 case Severity.INFO:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
69 return modifierString(Modifier.UNDERLINE) ~ fgColorString(Color.GREEN);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 case Severity.MESSAGE:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
71 return fgColorString(Color.YELLOW);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72 case Severity.WARNING:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
73 return modifierString(Modifier.BRIGHT) ~ fgColorString(Color.MAGENTA);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 case Severity.ERROR:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
75 return modifierString(Modifier.BRIGHT) ~ fgColorString(Color.RED);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 case Severity.FATAL:
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 40
diff changeset
77 return modifierString(Modifier.BRIGHT) ~ bgColorString(Color.RED) ~ fgColorString(Color.WHITE);
40
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
78 default:
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
79 assert(0);
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 assert(0);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84 void log(in Severity severity, in string message) {
58
c63719604adb Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents: 51
diff changeset
85 writeln(severityString(severity), message, modifierString(Modifier.RESET));
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 enum Modifier {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 RESET = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90 BRIGHT = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91 DIM = 2, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92 UNDERLINE = 3, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93 BLINK = 5, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 REVERSE = 7,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95 HIDDEN = 8
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
97
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
98 enum Color {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
99 BLACK = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
100 RED = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
101 GREEN = 2,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
102 YELLOW = 3,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
103 BLUE = 4,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
104 MAGENTA = 5,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
105 CYAN = 6,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
106 WHITE = 7
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
107 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
108
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
109 string modifierString(in Modifier m) { return std.string.format("\033[%dm", 0 + m); }
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
110 string fgColorString(in Color c) { return std.string.format("\033[%dm", 30 + c); }
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
111 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
112
51
0eaf39fda206 First cut at palette class
daveb
parents: 48
diff changeset
113 private string right(in string str, in int n) {
104
ab745d8b10e5 Updated to dmd 2.052
David Bryant <bagnose@gmail.com>
parents: 58
diff changeset
114 auto pos = str.length < n ? 0 : str.length - n;
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
115 return str[pos..$];
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
116 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
117 }