annotate doodle/core/logging.d @ 38:452915ecd1f4

Basic logging functionality
author David Bryant <bagnose@gmail.com>
date Sun, 27 Sep 2009 22:51:03 +0930
parents
children 1f97022e5c6d
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);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
48 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
49 assert(0);
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
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52 void log(in Severity severity, in string message) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53 write(mod_string(severity));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54 write(message);
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 writeln(modifier_string(Modifier.RESET));
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 enum Modifier {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59 RESET = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 BRIGHT = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61 DIM = 2, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 UNDERLINE = 3, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63 BLINK = 5, // does nothing in gnome-terminal
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 REVERSE = 7,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 HIDDEN = 8
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 }
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68 enum Color {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
69 BLACK = 0,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 RED = 1,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71 GREEN = 2,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72 YELLOW = 3,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
73 BLUE = 4,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 MAGENTA = 5,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75 CYAN = 6,
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 WHITE = 7
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
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 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
80 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
81 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
82
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 private const(char)[] right(in char[] str, int n) {
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84 int pos = str.length < n ? 0 : str.length - n;
452915ecd1f4 Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 return str[pos..$];
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 }