--- /dev/null
+#ifndef LOGGER_H
+#define LOGGER_H
+
+#include <QDebug>
+#include <QTime>
+#include <QSettings>
+#include "common.h"
+
+class Logger
+{
+public:
+ /** Logging level
+ * Exists as "LogLevel" entry in Situare.conf
+ * Valid values:
+ * QtDebugMsg -> 0
+ * QtWarningMsg -> 1
+ * QtCriticalMsg -> 2
+ * QtFatalMsg -> 3
+ * QtSystemMsg -> QtCriticalMsg -> 2
+ * @see QtMsgType
+ * Default: QtSystemMsg
+ */
+ static QtMsgType LOG_LEVEL;
+
+public:
+ Logger(QtMsgType level, const char* msg) :
+ level(level),
+ msg(msg)
+ {
+ static bool initialized = false;
+ if (!initialized) {
+ const QSettings settings(SETTINGS_ORGANIZATION_NAME, SETTINGS_APPLICATION_NAME);
+ LOG_LEVEL = static_cast<QtMsgType>(settings.value("LogLevel", (int)LOG_LEVEL).toInt());
+ initialized = true;
+ }
+ if (LOG_LEVEL <= level) {
+ time.start();
+ QDebug(QtDebugMsg) << msg << "enter";
+ }
+ }
+ ~Logger()
+ {
+ if (LOG_LEVEL <= level) {
+ QDebug(level) << msg << "exit, elapsed:" << time.elapsed() << "ms";
+ }
+ }
+
+private:
+ QTime time;
+ QtMsgType level;
+ const char* msg;
+};
+
+QtMsgType Logger::LOG_LEVEL = QtSystemMsg;
+
+/** @brief Log function time
+ */
+#define DEBUG_FUNCTION_TIME Logger function_time_logger(QtDebugMsg, __PRETTY_FUNCTION__)
+
+#endif // LOGGER_H