2019-11-12 12:02:50 +01:00

108 lines
2.5 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(sdkutils)
Q_DECLARE_LOGGING_CATEGORY(sdkdb)
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 values
*
* * bits - Expected 32bits
* * subjectId - must be valid ( not possible to add token withou valid subject )
*
* @m_class{m-block m-error}
@par Third-party license info
This utility depends on the [Magnum engine](https://magnum.graphics).
It's licensed under MIT, so all you need to do is mention it in the
credits of your commercial app.
*
*
*/
explicit Logger(QObject *parent = nullptr);
/**
* @brief User specific consumer of logger messages
* @param consumer - sublass of serversdk::Logger
*
* @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);
/** Pushing 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; //!< Test
QMutex mMutex;
};
} // core