-
Notifications
You must be signed in to change notification settings - Fork 0
/
helloworld.cpp
85 lines (75 loc) · 2.29 KB
/
helloworld.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "decouple_logger.h"
#include <unordered_map>
using namespace Joger::DecoupleLogger;
class Table : public LoggerBase {
public:
void testLog() { callLog(LogLevel::INFO, "this is the %s's log", "Table"); }
};
class Chair : public LoggerBase {
public:
void testLog() {
callLog(LogLevel::WARNING, "this is the %s's log", "Chair");
}
};
class ClassRoom : public LoggerBase {
public:
ClassRoom() {
registLoggerSubClass(&tb);
registLoggerSubClass(&ch);
}
void testLog() {
callLog(LogLevel::ERROR, "this is the ClassRoom's log");
tb.testLog();
ch.testLog();
}
private:
Table tb;
Chair ch;
};
/**
* @brief Use unorder_map to make the code look better
*
*/
static const std::unordered_map<LogLevel,
std::function<void(const std::string &)>>
g_log_func{std::make_pair(LogLevel::ERROR,
[](const std::string &msg) {
printf("ERROR: %s\n", msg.c_str());
}),
std::make_pair(LogLevel::WARNING,
[](const std::string &msg) {
printf("WARNING: %s\n", msg.c_str());
}),
std::make_pair(LogLevel::INFO,
[](const std::string &msg) {
printf("INFO: %s\n", msg.c_str());
}),
std::make_pair(LogLevel::DEBUG, [](const std::string &msg) {
printf("DEBUG: %s\n", msg.c_str());
})};
int main(int argc, char const *argv[]) {
ClassRoom cr;
// setLoggerFunc to call logs
cr.setLoggerFunc([](const LogLevel &log_level, const std::string &msg) {
printf("example 1:\n");
if (LogLevel::ERROR == log_level) {
printf("ERROR: ");
} else if (LogLevel::WARNING == log_level) {
printf("WARNING: ");
} else if (LogLevel::INFO == log_level) {
printf("INFO: ");
}
printf("%s\n", msg.c_str());
});
// or you can write like this
cr.setLoggerFunc([&](const LogLevel &log_level, const std::string &msg) {
printf("example 2:\n");
auto iter = g_log_func.find(log_level);
if (iter == g_log_func.end()) {
return;
}
iter->second(msg);
});
cr.testLog();
return 0;
}