CTL  0.6.1
Computed Tomography Library
messagehandler.h
1 #ifndef CTL_MESSAGEHANDLER_H
2 #define CTL_MESSAGEHANDLER_H
3 
4 #include <QMessageLogContext>
5 #include <QObject>
6 #include <QStringList>
7 
8 namespace CTL {
9 
39 class MessageHandler : public QObject
40 {
41  Q_OBJECT
42 public:
43  // non-copyable
44  MessageHandler(const MessageHandler&) = delete;
45  MessageHandler(MessageHandler&&) = delete;
46  MessageHandler& operator=(const MessageHandler&) = delete;
47  MessageHandler& operator=(MessageHandler&&) = delete;
48  ~MessageHandler() override = default;
49 
50  // get the instance of the message handler
51  static MessageHandler& instance();
52 
53  // installer method to be used to set in qInstallMessageHandler()
54  static void qInstaller(QtMsgType type, const QMessageLogContext& context, const QString &msg);
55 
56  // getter for full log
57  const QStringList& log() const;
58 
59  // getter for last message (convenience)
60  QString lastMessage() const;
61 
62  // blacklist everything
63  void blacklistAll(bool blacklist = true);
64  // add a class to the log blacklist
65  template<class ... QString>
66  void blacklistClassOrFunction(const QString& ... names);
67  // add a file to the log blacklist
68  template<class ... QString>
69  void blacklistFile(const QString& ... names);
70  // add a messsage type to the blacklist
71  void blacklistMessageType(QtMsgType type);
72  // clears all blacklists (every message will be processed)
73  void clearAllBlacklists();
74  // clears all whitelists
75  void clearAllWhitelists();
76 
77  // enforce that messages appear in log even when blacklisted (no stream output)
78  void enforceLoggingOfBlacklistMsg(bool enabled = true);
79 
80  // sets the file name for log file to 'fileName'
81  void setLogFileName(const QString& fileName);
82 
83  // suppress output to stream (still log in history)
84  void squelch(bool enabled = true);
85  void setQuiet(bool enabled = true); // same as squelch(bool)
86 
87  // change what information is included in message string
88  void toggleDateTag(bool show);
89  void toggleMessageOriginTag(bool show);
90  void toggleTimeTag(bool show);
91  void toggleTypeTag(bool show);
92  void toggleAllTags(bool show);
93 
94  // whitelisting - whitelisted classes, functions or file ignore blacklists
95  template<class ... QString>
96  void whitelistClassOrFunction(const QString& ... names);
97  template<class ... QString>
98  void whitelistFile(const QString& ... names);
99 
100  // writes the log to the file set via setLogFileName. returns true on success
101  bool writeLogFile() const;
102  // same as writeLogFile(); clears the log after a successful write.
103  bool writeLogFileAndClear();
104 
105  // central logging function, processes log message received from Qt streams
106  void processMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg);
107 
108 Q_SIGNALS:
109  void newLogEntry() const;
110  void messagePrinted() const;
111 
112 public Q_SLOTS:
113  void messageFromSignal(QString msg);
114 
115 private:
116  MessageHandler();
117 
118  QStringList _theLog;
119  QString _logfileName = QStringLiteral("ctllog.txt");
120 
121  bool _blacklistAll = false;
122  bool _blacklistMsgType[5] = {};
123  bool _logBlacklistedMsg = false;
124  bool _showDateTag = false;
125  bool _showMsgOrig = false;
126  bool _showTimeTag = true;
127  bool _showTypeTag = true;
128  bool _squelched = false;
129 
130  QStringList _blacklistClassFct;
131  QStringList _blacklistFiles;
132 
133  QStringList _whitelistClassFct;
134  QStringList _whitelistFiles;
135 
136  bool isBlacklisted(QtMsgType type, const QMessageLogContext& context) const;
137  bool isBlacklistedClassOrFct(const QMessageLogContext& context) const;
138  bool isBlacklistedFile(const QMessageLogContext& context) const;
139  bool isBlacklistedMessageType(QtMsgType type) const;
140 
141  bool isWhitelisted(const QMessageLogContext& context) const;
142  bool isWhitelistedClassOrFct(const QMessageLogContext& context) const;
143  bool isWhitelistedFile(const QMessageLogContext& context) const;
144 
145  QString dateTimeTag() const;
146  static QString messageOriginString(const QMessageLogContext& context);
147  static QString typeTag(QtMsgType type);
148 
149  void printMessage(const QString& finalMsg, QtMsgType type) const;
150 
151  static bool screenList(const QStringList& list, const char* str);
152 };
153 
176 template<class ... QString>
177 void MessageHandler::blacklistClassOrFunction(const QString& ... names)
178 {
179  _blacklistClassFct.append(QStringList{ names... });
180 }
181 
208 template<class ... QString>
209 void MessageHandler::blacklistFile(const QString& ... names)
210 {
211  _blacklistFiles.append(QStringList{ names... });
212 }
213 
244 template<class ... QString>
245 void MessageHandler::whitelistClassOrFunction(const QString& ... names)
246 {
247  _whitelistClassFct.append(QStringList{ names... });
248 }
249 
269 template<class ... QString>
270 void MessageHandler::whitelistFile(const QString& ... names)
271 {
272  _whitelistFiles.append(QStringList{ names... });
273 }
274 
275 
276 } // namespace CTL
277 
278 #endif // CTL_MESSAGEHANDLER_H
void messageFromSignal(QString msg)
Definition: messagehandler.cpp:282
void toggleDateTag(bool show)
Definition: messagehandler.cpp:212
void toggleAllTags(bool show)
Definition: messagehandler.cpp:237
static void qInstaller(QtMsgType type, const QMessageLogContext &context, const QString &msg)
Definition: messagehandler.cpp:296
void toggleTimeTag(bool show)
Definition: messagehandler.cpp:217
void toggleMessageOriginTag(bool show)
Definition: messagehandler.cpp:227
void whitelistClassOrFunction(const QString &... names)
Definition: messagehandler.h:245
void squelch(bool enabled=true)
Definition: messagehandler.cpp:207
void blacklistMessageType(QtMsgType type)
Definition: messagehandler.cpp:151
void toggleTypeTag(bool show)
Definition: messagehandler.cpp:222
void enforceLoggingOfBlacklistMsg(bool enabled=true)
Definition: messagehandler.cpp:182
bool writeLogFile() const
Definition: messagehandler.cpp:250
void setQuiet(bool enabled=true)
Definition: messagehandler.cpp:200
void blacklistFile(const QString &... names)
Definition: messagehandler.h:209
bool writeLogFileAndClear()
Definition: messagehandler.cpp:268
void clearAllBlacklists()
Definition: messagehandler.cpp:162
void whitelistFile(const QString &... names)
Definition: messagehandler.h:270
const QStringList & log() const
Definition: messagehandler.cpp:104
The MessageHandler class provides a means to control the message output of the CTL and allows saving ...
Definition: messagehandler.h:39
void blacklistAll(bool blacklist=true)
Definition: messagehandler.cpp:136
QString lastMessage() const
Definition: messagehandler.cpp:113
static MessageHandler & instance()
Definition: messagehandler.cpp:55
void blacklistClassOrFunction(const QString &... names)
Definition: messagehandler.h:177
void setLogFileName(const QString &fileName)
Definition: messagehandler.cpp:192
void clearAllWhitelists()
Definition: messagehandler.cpp:172