-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.cpp
62 lines (54 loc) · 1.17 KB
/
logger.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "logger.hpp"
#include <iomanip>
#include <string>
#include <cassert>
const char* level_desc(log_level level) {
switch(level) {
case error : return "Error";
case warn : return "Warning";
case status: return "Status";
case debug : return "Debug";
case trace : return "Trace";
}
assert(false);
return "(unknown log level)";
}
namespace {
log_level max_loglevel(status);
}
void set_max_loglevel(log_level max) {
max_loglevel = max;
}
struct nop_buf : public std::stringbuf {} s_nop_buf;
std::ostream s_nop_stream(&s_nop_buf);
log_writer log(log_level level) {
if(level>max_loglevel) {
return log_writer(s_nop_stream);
}
if(level==status) {
return log_writer(std::cout);
}
log_writer lw(std::cerr);
std::string desc = level_desc(level);
//std::transform(desc.begin(), desc.end(), desc.begin(), ::toupper);
//lw << '[' << std::left << std::setw(9) << desc << "] ";
lw << desc << ": ";
return lw;
}
trace_func::trace_func(const char* msg)
: m_msg(msg)
{
log(trace)
<< std::string(2*ident, ' ')
<< ">> "
<< m_msg;
++ident;
}
trace_func::~trace_func() {
--ident;
log(trace)
<< std::string(2*ident, ' ')
<< "<< "
<< m_msg;
}
size_t trace_func::ident = 0;