Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
issuelogger.h
1 #ifndef ERRORHANDLING_H
2 #define ERRORHANDLING_H
3 
4 #include <QDateTime>
5 #include <QQueue>
6 #include <fstream>
7 #include "Kernel_global.h"
8 
9 class QSqlError;
10 
11 namespace Ilwis {
22 class KERNELSHARED_EXPORT IssueObject {
23 public:
24  enum LogMessageFormat{lmFULL, lmREGULAR, lmCODE};
33  enum IssueType{itNone=0, itCritical=1, itError=2, itWarning=4, itMessage=8, itDebug=16, itAll=255};
34 
35  IssueObject();
36  IssueObject(const QString& message, int it, quint64 id);
37 
38  QString message() const;
39  QDateTime time() const;
40  int type() const;
41  QString logMessage(LogMessageFormat lmf = lmFULL) const;
42  void addCodeInfo(int line, const QString& func, const QString& file);
43  quint64 id() const;
44 
45  int codeLine() const;
46  QString codeFunc() const;
47  QString codeFile() const;
48  void stream(std::ofstream &stream, LogMessageFormat frmt);
49 
50 private:
51  QString type2String() const;
52 
53  QDateTime _itime;
54  QString _message;
55  quint64 _id;
56  int _line = -1;
57  QString _func = "?";
58  QString _file = "?";
59 
60  int _itype;
61 };
62 
63 class KERNELSHARED_EXPORT IssueLogger : public QObject
64 {
65  Q_OBJECT
66 
67 public:
68  explicit IssueLogger(QObject *parent=0);
69  ~IssueLogger();
70 
71  quint64 log(const QString& message, int it=IssueObject::itError);
72  quint64 logSql(const QSqlError& err);
73  quint64 log(const QString &objectName, const QString &message, int it=IssueObject::itError);
74  void addCodeInfo(quint64 issueid,int line, const QString& func, const QString& file);
75 
76  QString popfirst(int it=IssueObject::itAll);
77  QString poplast(int it=IssueObject::itAll);
78  QString popList(int it=IssueObject::itAll, int number=-1);
79  IssueObject::IssueType maxIssueLevel() const;
80  void copy(IssueLogger& other);
81  void clear();
82 
83 signals:
84  void ilwiserrormessage(const QString& message);
85 
86 private:
87  QString _lastmessage;
88  quint32 _repeatCount;
89  quint64 _issueId=0;
90  QQueue<IssueObject> _issues;
91  std::ofstream _logFileRegular;
92  std::ofstream _logFileCode;
93 
94 };
95 }
96 
97 #endif // ERRORHANDLING_H