annotate doodle/core/logging.d @ 40:1f97022e5c6d

Checkpoint. Development continues...
author daveb
date Mon, 12 Apr 2010 14:01:54 +0930
parents 452915ecd1f4
children 1b4c9ba58673
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;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
6 }
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 public {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
9 void trace(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
10 log(Severity.TRACE, std.string.format("%s(%d): TRACE: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
11 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
12 void info(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
13 log(Severity.INFO, std.string.format("%s(%d): INFO: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
14 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
15 void message(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
16 log(Severity.MESSAGE, std.string.format("%s(%d): MESSAGE: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
17 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
18 void warning(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
19 log(Severity.WARNING, std.string.format("%s(%d): WARNING: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
20 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
21 void error(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
22 log(Severity.ERROR, std.string.format("%s(%d): ERROR: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
23 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
24 void fatal(string file = __FILE__, int line = __LINE__)(in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
25 log(Severity.FATAL, std.string.format("%s(%d): FATAL: %s", right(file, 20), line, message));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
26 assert(0);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
27 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
28 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
30 private {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
31 mixin(defineEnum!("Severity",
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
32 "TRACE", "INFO", "MESSAGE", "WARNING", "ERROR", "FATAL"));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
33
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
34 string mod_string(in Severity s) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
35 switch (s) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
36 case Severity.TRACE:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
37 return modifier_string(Modifier.DIM) ~ fg_color_string(Color.CYAN);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
38 case Severity.INFO:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
39 return modifier_string(Modifier.UNDERLINE) ~ fg_color_string(Color.GREEN);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
40 case Severity.MESSAGE:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
41 return fg_color_string(Color.YELLOW);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
42 case Severity.WARNING:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 return modifier_string(Modifier.BRIGHT) ~ fg_color_string(Color.MAGENTA);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
44 case Severity.ERROR:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
45 return modifier_string(Modifier.BRIGHT) ~ fg_color_string(Color.RED);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
46 case Severity.FATAL:
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
47 return modifier_string(Modifier.BRIGHT) ~ bg_color_string(Color.RED) ~ fg_color_string(Color.WHITE);
40
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
48 default:
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 38
diff changeset
49 assert(0);
38
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51 assert(0);
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 void log(in Severity severity, in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 write(mod_string(severity));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 write(message);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57 writeln(modifier_string(Modifier.RESET));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 enum Modifier {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61 RESET = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 BRIGHT = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63 DIM = 2, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 UNDERLINE = 3, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 BLINK = 5, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 REVERSE = 7,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67 HIDDEN = 8
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
69
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 enum Color {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71 BLACK = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72 RED = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
73 GREEN = 2,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 YELLOW = 3,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75 BLUE = 4,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 MAGENTA = 5,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77 CYAN = 6,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78 WHITE = 7
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 }
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 string modifier_string(Modifier m) { return std.string.format("\033[%dm", 0 + m); }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 string fg_color_string(Color c) { return std.string.format("\033[%dm", 30 + c); }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 string bg_color_string(Color c) { return std.string.format("\033[%dm", 40 + c); }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 private const(char)[] right(in char[] str, int n) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 int pos = str.length < n ? 0 : str.length - n;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87 return str[pos..$];
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 }