41 | 41 |
/*
|
42 | 42 |
* Custom buffer to store messages
|
43 | 43 |
*/
|
44 | |
class LogBuffer : public std::stringbuf {
|
|
44 |
class LogBuffer final : public std::stringbuf {
|
45 | 45 |
|
46 | 46 |
public:
|
47 | 47 |
LogBuffer() : std::stringbuf() { _LogLevel = Log::current_level; }
|
|
104 | 104 |
bool _writePreface = true;
|
105 | 105 |
|
106 | 106 |
protected:
|
107 | |
int sync() override {
|
|
107 |
int sync() {
|
108 | 108 |
|
109 | 109 |
std::ostringstream _message;
|
110 | 110 |
|
|
164 | 164 |
}
|
165 | 165 |
|
166 | 166 |
public:
|
167 | |
Logger() : std::ostream(new LogBuffer()), _ReportLevel(Log::current_level) {
|
|
167 |
Logger() : std::ostream(&_buffer), _ReportLevel(Log::current_level) {
|
168 | 168 |
setMultithreading(_maverick);
|
169 | 169 |
}
|
170 | 170 |
Logger(Log::Level ReportLevel)
|
171 | |
: std::ostream(new LogBuffer()), _ReportLevel(ReportLevel) {
|
|
171 |
: std::ostream(&_buffer), _ReportLevel(ReportLevel) {
|
172 | 172 |
setMultithreading(_maverick);
|
173 | 173 |
}
|
174 | 174 |
|
175 | |
~Logger() final {
|
176 | |
delete rdbuf();
|
177 | |
rdbuf(nullptr);
|
178 | |
}
|
179 | |
|
180 | 175 |
Logger &operator()(Log::Level LogLevel) {
|
181 | |
dynamic_cast<LogBuffer *>(rdbuf())->setLogLevel(LogLevel);
|
|
176 |
_buffer.setLogLevel(LogLevel);
|
182 | 177 |
return *this;
|
183 | 178 |
}
|
184 | 179 |
|
185 | 180 |
void setReportLevel(Log::Level ReportLevel) { _ReportLevel = ReportLevel; }
|
186 | 181 |
void setMultithreading(bool maverick) {
|
187 | 182 |
_maverick = maverick;
|
188 | |
dynamic_cast<LogBuffer *>(rdbuf())->setMultithreading(_maverick);
|
|
183 |
_buffer.setMultithreading(_maverick);
|
189 | 184 |
}
|
190 | 185 |
bool isMaverick() const { return _maverick; }
|
191 | 186 |
|
192 | 187 |
Log::Level getReportLevel() const { return _ReportLevel; }
|
193 | 188 |
|
194 | 189 |
void setPreface(Log::Level level, const std::string &preface) {
|
195 | |
dynamic_cast<LogBuffer *>(rdbuf())->setPreface(level, preface);
|
|
190 |
_buffer.setPreface(level, preface);
|
196 | 191 |
}
|
197 | 192 |
|
198 | 193 |
void setCommonPreface(const std::string &preface) {
|
|
202 | 197 |
setPreface(Log::warning, preface);
|
203 | 198 |
}
|
204 | 199 |
|
205 | |
void EnablePreface() { dynamic_cast<LogBuffer *>(rdbuf())->EnablePreface(); }
|
206 | |
|
207 | |
void DisablePreface() {
|
208 | |
dynamic_cast<LogBuffer *>(rdbuf())->DisablePreface();
|
209 | |
}
|
|
200 |
void EnablePreface() { _buffer.EnablePreface(); }
|
|
201 |
|
|
202 |
void DisablePreface() { _buffer.DisablePreface(); }
|
210 | 203 |
|
211 | 204 |
private:
|
|
205 |
LogBuffer _buffer;
|
212 | 206 |
// at what level of detail output messages
|
213 | 207 |
Log::Level _ReportLevel = Log::error;
|
214 | 208 |
|
215 | 209 |
// if true, only a single processor job is executed
|
216 | 210 |
bool _maverick = false;
|
217 | 211 |
|
218 | |
std::string Messages() {
|
219 | |
return dynamic_cast<LogBuffer *>(rdbuf())->Messages();
|
220 | |
}
|
|
212 |
std::string Messages() { return _buffer.Messages(); }
|
221 | 213 |
};
|
222 | 214 |
|
223 | 215 |
/**
|