libdrmconf 0.15.1
A library to program DMR radios.
Loading...
Searching...
No Matches
logger.hh
1
3#ifndef LOGGER_HH
4#define LOGGER_HH
5
6#include <QFile>
7#include <QTextStream>
8#include <QList>
9#include <QMutex>
10
12#define logTrace() LogMessage(LogMessage::TRACE, __FILE__, __LINE__)
14#define logDebug() LogMessage(LogMessage::DEBUG, __FILE__, __LINE__)
16#define logInfo() LogMessage(LogMessage::INFO, __FILE__, __LINE__)
18#define logWarn() LogMessage(LogMessage::WARNING, __FILE__, __LINE__)
20#define logError() LogMessage(LogMessage::ERROR, __FILE__, __LINE__)
22#ifdef __cpp_lib_stacktrace
23#include <stacktrace>
24#define logFatal() LogMessage(LogMessage::FATAL, __FILE__, __LINE__) << \
25 QString::fromStdString(std::to_string(std::stacktrace::current()))
26#else
27#define logFatal() LogMessage(LogMessage::FATAL, __FILE__, __LINE__)
28#endif
29
34class LogMessage: public QTextStream
35{
36public:
46
47public:
53 LogMessage(Level level, const QString &file, int line, const QString &message="");
55 LogMessage(const LogMessage &other);
57 virtual ~LogMessage();
58
60 Level level() const;
62 const QString &file() const;
64 int line() const;
66 const QString &message() const;
67
68protected:
72 QString _file;
74 int _line;
76 QString _message;
77};
78
79
82class LogHandler: public QObject
83{
84 Q_OBJECT
85
86public:
88 explicit LogHandler(QObject *parent=nullptr);
90 virtual ~LogHandler();
92 virtual void handle(const LogMessage &message) = 0;
93};
94
95
98class Logger: public QObject
99{
100 Q_OBJECT
101
102protected:
104 Logger();
105
106public:
108 virtual ~Logger();
109
111 void log(const LogMessage &msg);
113 void addHandler(LogHandler *handler);
115 void remHandler(LogHandler *handler);
116
117protected slots:
119 void onHandlerDeleted(QObject *obj);
120
121public:
123 static Logger &get();
124
125protected:
129 QList<LogHandler *> _handler;
131 QMutex _lock;
132};
133
134
138{
139 Q_OBJECT
140
141public:
147 StreamLogHandler(QTextStream &stream, LogMessage::Level minLevel=LogMessage::DEBUG, bool color=false, QObject *parent=nullptr);
148
153
154 void handle(const LogMessage &message);
155
156protected:
158 QTextStream &_stream;
162 bool _color;
163};
164
165
169{
170 Q_OBJECT
171
172public:
177 FileLogHandler(const QString &file, LogMessage::Level minLevel=LogMessage::DEBUG, QObject *parent=nullptr);
178
180 virtual ~FileLogHandler();
181
186
187 void handle(const LogMessage &message);
188
189protected:
191 QFile _file;
193 QTextStream _stream;
196};
197
198#endif // LOGGER_HH
void setMinLevel(LogMessage::Level minLevel)
Resets the minimum log level.
Definition logger.cc:225
LogMessage::Level minLevel() const
Returns the minimum log level.
Definition logger.cc:220
QFile _file
The file to log into.
Definition logger.hh:191
void handle(const LogMessage &message)
Callback to handle log messages.
Definition logger.cc:230
QTextStream _stream
A reference to the text stream to log into.
Definition logger.hh:193
FileLogHandler(const QString &file, LogMessage::Level minLevel=LogMessage::DEBUG, QObject *parent=nullptr)
Constructor.
Definition logger.cc:188
LogMessage::Level _minLevel
The minimum log level.
Definition logger.hh:195
virtual ~FileLogHandler()
Destructor, closes log file.
Definition logger.cc:212
Some simple class implementing a [1-10] level setting.
Definition level.hh:15
Interface for all log message handler.
Definition logger.hh:83
virtual void handle(const LogMessage &message)=0
Callback to handle log messages.
LogHandler(QObject *parent=nullptr)
Constructor.
Definition logger.cc:52
virtual ~LogHandler()
Destructor.
Definition logger.cc:58
Implements a log-message.
Definition logger.hh:35
Level _level
The log level.
Definition logger.hh:70
QString _file
The source file.
Definition logger.hh:72
int _line
The source line.
Definition logger.hh:74
Level
Possible log-levels.
Definition logger.hh:38
@ DEBUG
Level for debug messages. Will not be shown to the user unless requested.
Definition logger.hh:40
@ FATAL
Level for fatal error messages.
Definition logger.hh:44
@ TRACE
Level for very verbose trace messages (e.g. raw IO dumps). Not shown unless requested.
Definition logger.hh:39
@ INFO
Level for informative messages. Will not be shown to the user unless requested.
Definition logger.hh:41
@ ERROR
Level for error messages.
Definition logger.hh:43
@ WARNING
Level for warning messages.
Definition logger.hh:42
virtual ~LogMessage()
Destructor.
Definition logger.cc:24
QString _message
The log message content.
Definition logger.hh:76
const QString & message() const
Returns the log message content.
Definition logger.cc:44
Level level() const
Returns the level of the log message.
Definition logger.cc:29
int line() const
Returns the source line.
Definition logger.cc:39
const QString & file() const
Returns the source file.
Definition logger.cc:34
LogMessage(Level level, const QString &file, int line, const QString &message="")
Constructor.
Definition logger.cc:10
QList< LogHandler * > _handler
The list of registered log-handler.
Definition logger.hh:129
static Logger * _instance
The singleton instance.
Definition logger.hh:127
void onHandlerDeleted(QObject *obj)
Internal callback to handle deleted handler objects.
Definition logger.cc:108
void addHandler(LogHandler *handler)
Adds a log-handler to the logger.
Definition logger.cc:88
static Logger & get()
Factory method to get the singleton instance.
Definition logger.cc:113
Logger()
Hidden constructor.
Definition logger.cc:68
void remHandler(LogHandler *handler)
Removes a log-handler from the logger.
Definition logger.cc:99
virtual ~Logger()
Destructor.
Definition logger.cc:74
void log(const LogMessage &msg)
Logs a message.
Definition logger.cc:79
QMutex _lock
Some mutex to prevent issues with log messages from different threads.
Definition logger.hh:131
LogMessage::Level minLevel() const
Returns the minimum log level.
Definition logger.cc:131
void handle(const LogMessage &message)
Callback to handle log messages.
Definition logger.cc:141
LogMessage::Level _minLevel
The minimum log level.
Definition logger.hh:160
QTextStream & _stream
A reference to the text stream to log into.
Definition logger.hh:158
void setMinLevel(LogMessage::Level minLevel)
Resets the minimum log level.
Definition logger.cc:136
StreamLogHandler(QTextStream &stream, LogMessage::Level minLevel=LogMessage::DEBUG, bool color=false, QObject *parent=nullptr)
Constructor.
Definition logger.cc:124
bool _color
If true, write messages using console colors.
Definition logger.hh:162