]>
Dogcows Code - chaz/yoink/blob - src/moof/log.cc
2 /*] Copyright (c) 2009-2011, Charles McGarvey [*****************************
3 **] All rights reserved.
5 * Distributable under the terms and conditions of the 2-clause BSD license;
6 * see the file COPYING for a complete text of the license.
8 *****************************************************************************/
19 inline int isatty(int dummy
) { return 0; }
29 enum log::level
log::global_level_
= log::info
;
32 void log::level(enum level level
)
34 global_level_
= level
;
37 enum log::level
log::level()
42 log::log(enum level level
) :
48 case log::error
: prefix_
= " error: "; break;
49 case log::warning
: prefix_
= "warning: "; break;
50 case log::info
: prefix_
= " info: "; break;
51 case log::debug
: prefix_
= " debug: "; break;
52 case log::none
: break;
57 case log::error
: prefix_
= "\033[30;101m error: ";
59 case log::warning
: prefix_
= "\033[30;103mwarning: ";
61 case log::info
: prefix_
= " info: ";
63 case log::debug
: prefix_
= "\033[2m debug: ";
64 case log::none
: break;
68 std::ostream
& operator << (class log
& log
, log::endl_ endl
)
70 if (log::global_level_
< log
.level_
) return null_log
;
71 if (isatty(1) == 0) return moof::log
<< std::endl
;
72 return moof::log
<< "\033[0m" << std::endl
;
75 std::ostream
& operator << (std::ostream
& stream
, log::endl_ endl
)
77 if (isatty(1) == 0) return stream
<< std::endl
;
78 return stream
<< "\033[0m" << std::endl
;
81 std::ostream
& log(std::cout
);
83 static std::ofstream null_log_
;
84 std::ostream
& null_log(null_log_
);
86 // These objects are intentionally not deconstructed so that logging will
87 // still be available after this module has been cleaned up.
88 class log
& log_error(*new class log(log::error
));
89 class log
& log_warning(*new class log(log::warning
));
90 class log
& log_info(*new class log(log::info
));
91 class log
& log_debug(*new class log(log::debug
));
93 static int log_script(script
& script
, enum log::level level
)
95 static class log
* logs
[] = {
103 script::slot param
= script
[1];
105 while (!param
.is_none()) {
106 (*logs
[level
])(param
);
113 void log::import(script
& script
)
115 script
.import_function("LogError",
116 boost::bind(log_script
, _1
, log::error
));
117 script
.import_function("LogWarning",
118 boost::bind(log_script
, _1
, log::warning
));
119 script
.import_function("LogInfo",
120 boost::bind(log_script
, _1
, log::info
));
121 script
.import_function("print",
122 boost::bind(log_script
, _1
, log::info
));
123 script
.import_function("LogDebug",
124 boost::bind(log_script
, _1
, log::debug
));
This page took 0.03321 seconds and 4 git commands to generate.