-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathlog.cpp
More file actions
127 lines (103 loc) · 3.31 KB
/
log.cpp
File metadata and controls
127 lines (103 loc) · 3.31 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
// local includes
#include "linuxdeploy/log/log.h"
namespace linuxdeploy::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);
}
}