-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathlog.cpp
More file actions
131 lines (107 loc) · 4.13 KB
/
log.cpp
File metadata and controls
131 lines (107 loc) · 4.13 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// local includes
#include "linuxdeploy/core/log.h"
namespace linuxdeploy {
namespace core {
namespace log {
LD_LOGLEVEL ldLog::verbosity = LD_INFO;
void ldLog::setVerbosity(LD_LOGLEVEL verbosity) {
ldLog::verbosity = verbosity;
}
ldLog::ldLog() {
prependSpace = false;
currentLogLevel = LD_INFO;
logLevelSet = false;
};
ldLog::ldLog(bool prependSpace, bool logLevelSet, LD_LOGLEVEL logLevel) {
this->prependSpace = prependSpace;
this->currentLogLevel = logLevel;
this->logLevelSet = logLevelSet;
}
void ldLog::checkPrependSpace() {
if (prependSpace) {
stream << " ";
prependSpace = false;
}
}
bool ldLog::checkVerbosity() {
// std::cerr << "current: " << currentLogLevel << " verbosity: " << verbosity << std::endl;
return (currentLogLevel >= verbosity);
}
ldLog ldLog::operator<<(const std::string& message) {
if (checkVerbosity()) {
checkPrependSpace();
stream << message;
}
return ldLog(true, logLevelSet, currentLogLevel);
}
ldLog ldLog::operator<<(const char* message) {
if (checkVerbosity()) {
checkPrependSpace();
stream << message;
}
return ldLog(true, logLevelSet, currentLogLevel);
}
ldLog ldLog::operator<<(const std::filesystem::path& path) {
if (checkVerbosity()) {
checkPrependSpace();
stream << path.string();
}
return ldLog(true, logLevelSet, currentLogLevel);
}
ldLog ldLog::operator<<(const int val) {
return ldLog::operator<<(std::to_string(val));
}
ldLog ldLog::operator<<(const size_t val) {
return ldLog::operator<<(std::to_string(val));
}
ldLog ldLog::operator<<(const double val) {
return ldLog::operator<<(std::to_string(val));
}
ldLog ldLog::operator<<(stdEndlType strm) {
if (checkVerbosity()) {
checkPrependSpace();
stream << strm;
}
return ldLog(false, logLevelSet, currentLogLevel);
}
ldLog ldLog::operator<<(const LD_LOGLEVEL logLevel) {
if (logLevelSet) {
throw std::runtime_error(
"log level must be first element passed via the stream insertion operator");
}
logLevelSet = true;
currentLogLevel = logLevel;
if (checkVerbosity()) {
switch (logLevel) {
case LD_DEBUG:
stream << "DEBUG: ";
break;
case LD_WARNING:
stream << "WARNING: ";
break;
case LD_ERROR:
stream << "ERROR: ";
break;
default:
break;
}
}
return ldLog(false, logLevelSet, currentLogLevel);
}
ldLog ldLog::operator<<(const LD_STREAM_CONTROL streamControl) {
bool prependSpace = true;
switch (streamControl) {
case LD_NO_SPACE:
prependSpace = false;
break;
default:
break;
}
return ldLog(prependSpace, logLevelSet, currentLogLevel);
}
void ldLog::write(const char* s, const size_t n) {
stream.write(s, n);
}
}
}
}