2019-06-01 19:25:24 +02:00
|
|
|
#pragma once
|
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
#include <sstream> // std::stringstream (buffer for log entries)
|
|
|
|
#include <string>
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2020-11-02 23:51:44 +01:00
|
|
|
#ifndef LOG_USEMUTEX
|
2020-11-20 22:04:05 +01:00
|
|
|
#define LOG_USEMUTEX 0
|
2020-11-02 23:51:44 +01:00
|
|
|
#endif
|
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
namespace Log {
|
2022-09-04 19:58:19 +02:00
|
|
|
enum class Level { off = 0, fatal, error, warn, note, info, debug, trace };
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
// set up the logger with a ConsoleOutput
|
|
|
|
void init();
|
|
|
|
// close all output streams
|
|
|
|
void stop();
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2022-07-04 21:09:52 +02:00
|
|
|
void addLogfile(const std::string& filename, Level max, bool truncate = false);
|
|
|
|
void addLogfile(const std::string& filename, Level min, Level max, bool truncate = false);
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
void setConsoleLogLevel(Level lvl);
|
|
|
|
void setColoredOutput(bool enabled);
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
// Log entry that can be formed with various mixed data types
|
|
|
|
// by concatenation with the << operator
|
|
|
|
// Inspired from https://stackoverflow.com/a/8337882
|
|
|
|
class Entry {
|
|
|
|
private:
|
|
|
|
std::stringstream ss;
|
|
|
|
Level lvl;
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
void addMetadataHeader();
|
2019-06-01 19:25:24 +02:00
|
|
|
|
2019-06-02 18:54:58 +02:00
|
|
|
public:
|
2020-09-23 20:26:44 +02:00
|
|
|
Entry(Level lvl);
|
|
|
|
Entry(Entry&&) = default;
|
|
|
|
~Entry();
|
|
|
|
|
|
|
|
template <typename T> Entry& operator<<(const T& msg) {
|
|
|
|
ss << msg;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
};
|
2020-09-23 18:52:49 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
class LeveledSink {
|
|
|
|
private:
|
|
|
|
Level level;
|
2020-09-23 18:52:49 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
public:
|
|
|
|
LeveledSink(Level level);
|
2020-09-23 18:52:49 +02:00
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
template <typename T> Entry operator<<(const T& msg) {
|
|
|
|
Entry entry(level);
|
|
|
|
entry << msg;
|
|
|
|
return entry;
|
|
|
|
}
|
2019-06-01 19:25:24 +02:00
|
|
|
};
|
2020-09-23 20:26:44 +02:00
|
|
|
|
|
|
|
// LeveledSinks
|
2020-09-23 21:02:31 +02:00
|
|
|
extern LeveledSink fatal;
|
|
|
|
extern LeveledSink error;
|
|
|
|
extern LeveledSink warn;
|
|
|
|
extern LeveledSink note;
|
|
|
|
extern LeveledSink info;
|
|
|
|
extern LeveledSink debug;
|
|
|
|
extern LeveledSink trace;
|
|
|
|
|
2020-09-23 20:26:44 +02:00
|
|
|
} // namespace Log
|