
* added open service logs to logs page * redesign of log saving buttons * hide service logs buttons for mobile platforms * refactoring: moved logger to common folder * feature: added the ability to enable logs to the start screen
114 lines
2.6 KiB
C++
114 lines
2.6 KiB
C++
#ifndef LOGGER_H
|
|
#define LOGGER_H
|
|
|
|
#include <QDebug>
|
|
#include <QDir>
|
|
#include <QFile>
|
|
#include <QString>
|
|
#include <QTextStream>
|
|
|
|
#include "mozilla/shared/loglevel.h"
|
|
|
|
class Logger : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
static Logger &Instance();
|
|
|
|
static bool init(bool isServiceLogger);
|
|
static void deInit();
|
|
|
|
static bool setServiceLogsEnabled(bool enabled);
|
|
|
|
static bool openLogsFolder(bool isServiceLogger);
|
|
|
|
static void clearLogs(bool isServiceLogger);
|
|
static void clearServiceLogs();
|
|
static void cleanUp();
|
|
|
|
static QString userLogsFilePath();
|
|
static QString serviceLogsFilePath();
|
|
static QString systemLogDir();
|
|
|
|
static QString getLogFile();
|
|
static QString getServiceLogFile();
|
|
|
|
// compat with Mozilla logger
|
|
Logger(const QString &className)
|
|
{
|
|
m_className = className;
|
|
}
|
|
const QString &className() const
|
|
{
|
|
return m_className;
|
|
}
|
|
|
|
class Log
|
|
{
|
|
public:
|
|
Log(Logger *logger, LogLevel level);
|
|
~Log();
|
|
|
|
Log &operator<<(uint64_t t);
|
|
Log &operator<<(const char *t);
|
|
Log &operator<<(const QString &t);
|
|
Log &operator<<(const QStringList &t);
|
|
Log &operator<<(const QByteArray &t);
|
|
Log &operator<<(const QJsonObject &t);
|
|
Log &operator<<(QTextStreamFunction t);
|
|
Log &operator<<(const void *t);
|
|
|
|
// Q_ENUM
|
|
template<typename T> typename std::enable_if<QtPrivate::IsQEnumHelper<T>::Value, Log &>::type operator<<(T t)
|
|
{
|
|
const QMetaObject *meta = qt_getEnumMetaObject(t);
|
|
const char *name = qt_getEnumName(t);
|
|
addMetaEnum(typename QFlags<T>::Int(t), meta, name);
|
|
return *this;
|
|
}
|
|
|
|
private:
|
|
void addMetaEnum(quint64 value, const QMetaObject *meta, const char *name);
|
|
|
|
Logger *m_logger;
|
|
LogLevel m_logLevel;
|
|
|
|
struct Data
|
|
{
|
|
Data() : m_ts(&m_buffer, QIODevice::WriteOnly)
|
|
{
|
|
}
|
|
|
|
QString m_buffer;
|
|
QTextStream m_ts;
|
|
};
|
|
|
|
Data *m_data;
|
|
};
|
|
|
|
Log error();
|
|
Log warning();
|
|
Log info();
|
|
Log debug();
|
|
QString sensitive(const QString &input);
|
|
|
|
private:
|
|
Logger() {};
|
|
Logger(Logger const &) = delete;
|
|
Logger &operator=(Logger const &) = delete;
|
|
|
|
static QString userLogsDir();
|
|
|
|
static QFile m_file;
|
|
static QTextStream m_textStream;
|
|
static QString m_logFileName;
|
|
static QString m_serviceLogFileName;
|
|
|
|
friend void debugMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
|
|
|
|
// compat with Mozilla logger
|
|
QString m_className;
|
|
};
|
|
|
|
#endif // LOGGER_H
|