1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
#pragma once
#include <QString>
#include <QVector>
#include <QTime>
#include <QStack>
namespace SyntopiaCore {
namespace Logging {
/// Predefined logging levels
enum LogLevel { NoneLevel, DebugLevel, TimingLevel, InfoLevel, WarningLevel, CriticalLevel, AllLevel };
/// Abstract base class for all loggers
class Logger {
public:
/// The destructors and constructors automatically add to the list of installed loggers.
Logger() {
loggers.append(this);
}
virtual ~Logger() {
// Remove from list of available loggers.
for (int i = loggers.size()-1; i >= 0; i--) {
if (loggers[i] == this) loggers.remove(i);
}
}
/// This method all loggers must implement
virtual void log(QString message, LogLevel priority) = 0;
/// Log messages are sent to this list of loggers.
static QVector<Logger*> loggers;
static QStack<QTime> timeStack;
static QStack<QString> timeStringStack;
private:
};
void LOG(QString message, LogLevel priority);
/// Useful aliases
void Debug(QString text);
void INFO(QString text);
void TIME(QString text);
void TIME(int repetitions = 0); // End time...
void WARNING(QString text);
void CRITICAL(QString text);
}
}
|