hyperion.ng
Logger.h
1 #pragma once
2 
3 // QT includes
4 #include <QObject>
5 #include <QString>
6 
7 // stl includes
8 #include <stdio.h>
9 #include <stdarg.h>
10 #include <map>
11 #include <QVector>
12 
13 #include <utils/global_defines.h>
14 
15 // standard log messages
16 //#define _FUNCNAME_ __PRETTY_FUNCTION__
17 #define _FUNCNAME_ __FUNCTION__
18 
19 #define Debug(logger, ...) { (logger)->Message(Logger::DEBUG , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__); }
20 #define Info(logger, ...) { (logger)->Message(Logger::INFO , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__); }
21 #define Warning(logger, ...) { (logger)->Message(Logger::WARNING, __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__); }
22 #define Error(logger, ...) { (logger)->Message(Logger::ERROR , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__); }
23 
24 // conditional log messages
25 #define DebugIf(condition, logger, ...) { if (condition) {(logger)->Message(Logger::DEBUG , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__);} }
26 #define InfoIf(condition, logger, ...) { if (condition) {(logger)->Message(Logger::INFO , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__);} }
27 #define WarningIf(condition, logger, ...) { if (condition) {(logger)->Message(Logger::WARNING , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__);} }
28 #define ErrorIf(condition, logger, ...) { if (condition) {(logger)->Message(Logger::ERROR , __FILE__, _FUNCNAME_, __LINE__, __VA_ARGS__);} }
29 
30 // ================================================================
31 
32 class Logger : public QObject
33 {
34  Q_OBJECT
35 
36 public:
37  enum LogLevel { UNSET=0,DEBUG=1, INFO=2,WARNING=3,ERROR=4,OFF=5 };
38 
39  typedef struct
40  {
41  QString appName;
42  QString loggerName;
43  QString function;
44  unsigned int line;
45  QString fileName;
46  time_t utime;
47  QString message;
48  LogLevel level;
49  QString levelString;
50  } T_LOG_MESSAGE;
51 
52  static Logger* getInstance(QString name="", LogLevel minLevel=Logger::INFO);
53  static void deleteInstance(QString name="");
54  static void setLogLevel(LogLevel level, QString name="");
55  static LogLevel getLogLevel(QString name="");
56 
57  void Message(LogLevel level, const char* sourceFile, const char* func, unsigned int line, const char* fmt, ...);
58  void setMinLevel(LogLevel level) { _minLevel = level; };
59  LogLevel getMinLevel() { return _minLevel; };
60 
61 signals:
62  void newLogMessage(Logger::T_LOG_MESSAGE);
63 
64 protected:
65  Logger( QString name="", LogLevel minLevel=INFO);
66  ~Logger();
67 
68 private:
69  static std::map<QString,Logger*> *LoggerMap;
70  static LogLevel GLOBAL_MIN_LOG_LEVEL;
71 
72  QString _name;
73  QString _appname;
74  LogLevel _minLevel;
75  bool _syslogEnabled;
76  unsigned _loggerId;
77 };
78 
79 
80 class LoggerManager : public QObject
81 {
82  Q_OBJECT
83 
84 public:
85  static LoggerManager* getInstance();
86  QVector<Logger::T_LOG_MESSAGE>* getLogMessageBuffer() { return &_logMessageBuffer; };
87 
88 public slots:
89  void handleNewLogMessage(const Logger::T_LOG_MESSAGE&);
90 
91 signals:
92  void newLogMessage(Logger::T_LOG_MESSAGE);
93 
94 protected:
95  LoggerManager();
96 
97  static LoggerManager* _instance;
98  QVector<Logger::T_LOG_MESSAGE> _logMessageBuffer;
99  const int _loggerMaxMsgBufferSize;
100 };
101 
102 Q_DECLARE_METATYPE(Logger::T_LOG_MESSAGE);
Definition: Logger.h:32
Definition: Logger.h:39
Definition: Logger.h:80