2019-11-06 15:03:21 +01:00

94 lines
2.1 KiB
C++

#pragma once
#include "loggermessage.h"
// Qt
#include <QObject>
#include <QLoggingCategory>
#include <QMutex>
Q_DECLARE_LOGGING_CATEGORY(sdkcore)
Q_DECLARE_LOGGING_CATEGORY(sdknetwork)
Q_DECLARE_LOGGING_CATEGORY(sdkcompress)
namespace serversdk {
/**
* # Loggger
*
* Class for logging qDebug qWarning qInfo and qCritical messages
*
*
* ## Basic usage
*
* @code
* int main() {
* serversdk::initAppLogger(); // <-- then Logger::outputMessage will handle all messages
* // Log messge Filtering
* QStringList filters;
* filters << "qt.*=false";
* filters << "sdk.core.*=true";
* QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n")));
* }
* @endcode
*
* @see https://doc.qt.io/qt-5/qdebug.html
* @see https://doc.qt.io/qt-5/qloggingcategory.html
*
*/
class Logger : public QObject
{
Q_OBJECT
public:
// User defined consumer ( messages will be sent there using insertMessage )
static Logger* sConsumer;
/// Default constructor
explicit Logger(QObject *parent = nullptr);
/**
* @brief User specific consumer of logger messages
* @param consumer - sublass of serversdk::Loger
*
* @code
* #include "core.h"
* int main() {
* serversdk::initAppLogger();
* serversdk::Logger logger;
* serversdk::Logger::setConsumer(&logger);
* }
* @endcode
*
*/
static void setConsumer(Logger *consumer);
/** Only Message handler for Qt
*
* @code
* #include "core.h"
* int main() {
* serversdk::initAppLogger();
* }
* @endcode
*/
static void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg);
/** Pusing messges from installed message handler */
virtual void pushMessage(const LoggerMessage& logmsg);
QList<serversdk::LoggerMessage> getNewMessages(int currentCount);
signals:
void messageReceived(const serversdk::LoggerMessage &message);
void messageListUpdated();
private:
QList<LoggerMessage> mLogMessages;
QMutex mMutex;
};
} // core