AusweisApp
 
Lade ...
Suche ...
Keine Treffer
LogHandler.h
gehe zur Dokumentation dieser Datei
1
4
5#pragma once
6
7#include "Env.h"
8
9#include <QContiguousCache>
10#include <QDateTime>
11#include <QDebug>
12#include <QFileInfoList>
13#include <QLoggingCategory>
14#include <QMessageLogContext>
15#include <QMutex>
16#include <QPointer>
17#include <QStringList>
18#include <QTemporaryFile>
19#include <functional>
20
21
22#define spawnMessageLogger(category)\
23 MessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category)
24
25
26class test_LogHandler;
27class test_LogModel;
28
29
30namespace governikus
31{
32
34{
35 private:
36 QMessageLogger mMessageLogger;
37 std::function<const QLoggingCategory& ()> mCategory;
38
39 public:
40 MessageLogger(const char* pFile, int pLine, const char* pFunction, const std::function<const QLoggingCategory& ()>& pCategory);
41 QDebug critical() const;
42 QDebug debug() const;
43 QDebug info() const;
44 QDebug warning() const;
45};
46
47class LogEventHandler
48 : public QObject
49{
50 Q_OBJECT
51
52 friend class LogHandler;
53
54 private:
55 LogEventHandler() = default;
56 ~LogEventHandler() override = default;
57
58 Q_SIGNALS:
63 void fireLog(const QString& pMsg);
64 void fireRawLog(const QString& pMsg, const QString& pCategoryName);
65};
66
68{
69 Q_GADGET
70
71 friend class Env;
72 friend class ::test_LogHandler;
73 friend class ::test_LogModel;
74 friend QDebug operator<<(QDebug, const LogHandler&);
75
76 private:
77 struct LogWindowEntry
78 {
79 qint64 mPosition;
80 qint64 mLength;
81 };
82
83 static QString getLogFileTemplate();
84
85 QPointer<LogEventHandler> mEventHandler;
86 const bool mEnvPattern;
87 const int mFunctionFilenameSize;
88 qint64 mBacklogPosition;
89 bool mCriticalLog;
90 QContiguousCache<LogWindowEntry> mCriticalLogWindow;
91 QStringList mCriticalLogIgnore;
92 const QString mMessagePattern;
93 const QString mDefaultMessagePattern;
94 QPointer<QTemporaryFile> mLogFile;
95 QtMessageHandler mHandler;
96 bool mUseHandler;
97 bool mAutoRemove;
98 bool mUseLogFile;
99 const QByteArray mFilePrefix;
100 mutable QMutex mMutex;
101
102 inline void copyMessageLogContext(const QMessageLogContext& pSource,
103 QMessageLogContext& pDestination,
104 const QByteArray& pFilename = QByteArray(),
105 const QByteArray& pFunction = QByteArray(),
106 const QByteArray& pCategory = QByteArray()) const;
107 inline void logToFile(const QString& pOutput);
108 [[nodiscard]] QByteArray formatFunction(const char* const pFunction, const QByteArray& pFilename, int pLine) const;
109 [[nodiscard]] QByteArray formatFilename(const char* const pFilename) const;
110 [[nodiscard]] QByteArray formatCategory(const QByteArray& pCategory) const;
111
112 [[nodiscard]] QString getPaddedLogMsg(const QMessageLogContext& pContext, const QString& pMsg) const;
113 void handleMessage(QtMsgType pType, const QMessageLogContext& pContext, const QString& pMsg);
114 void handleLogWindow(QtMsgType pType, const char* pCategory, const QString& pMsg);
115 void removeOldLogFiles() const;
116 QByteArray readLogFile(qint64 pStart, qint64 pLength = -1);
117 void setLogFileInternal(bool pEnable);
118
119 static void messageHandler(QtMsgType pType, const QMessageLogContext& pContext, const QString& pMsg);
120
121 protected:
123 virtual ~LogHandler();
125
126#ifndef QT_NO_DEBUG
127
128 public:
129#endif
130 void reset();
131 [[nodiscard]] bool isInstalled() const;
132
133 public:
134 static constexpr int MAX_CATEGORY_LENGTH = 13;
135
136 void init();
137 [[nodiscard]] const LogEventHandler* getEventHandler() const;
138
139 void setAutoRemove(bool pRemove);
140 bool copy(const QString& pDest) const;
141 [[nodiscard]] bool copyOther(const QString& pSource, const QString& pDest) const;
142 void resetBacklog();
143 QByteArray getBacklog(bool pAll = false);
144 QByteArray getCriticalLogWindow();
145 [[nodiscard]] bool hasCriticalLog() const;
146 [[nodiscard]] qsizetype getCriticalLogCapacity() const;
147 void setCriticalLogCapacity(int pSize);
148
149 static QDateTime getFileDate(const QFileInfo& pInfo);
150 [[nodiscard]] QDateTime getCurrentLogFileDate() const;
151 [[nodiscard]] QFileInfoList getOtherLogFiles() const;
152 bool removeOtherLogFiles() const;
153 void setLogFile(bool pEnable);
154 [[nodiscard]] bool useLogFile() const;
155 void setUseHandler(bool pEnable);
156 [[nodiscard]] bool useHandler() const;
157};
158
159inline QDebug operator<<(QDebug pDbg, const governikus::LogHandler& pHandler)
160{
161 Q_ASSERT(pHandler.mLogFile);
162
163 QDebugStateSaver saver(pDbg);
164 pDbg.nospace() << pHandler.mLogFile->fileName();
165 return pDbg.space();
166}
167
168
169} // namespace governikus
Definition LogHandler.h:49
void fireLog(const QString &pMsg)
Every log will be fired by this signal. Be aware that you NEVER use a qDebug() or something like that...
void fireRawLog(const QString &pMsg, const QString &pCategoryName)
friend class LogHandler
Definition LogHandler.h:52
Definition LogHandler.h:68
static constexpr int MAX_CATEGORY_LENGTH
Definition LogHandler.h:134
void resetBacklog()
Definition LogHandler.cpp:243
static LogHandler & getInstance()
void init()
Definition LogHandler.cpp:79
void setUseHandler(bool pEnable)
Definition LogHandler.cpp:556
bool hasCriticalLog() const
Definition LogHandler.cpp:202
bool useHandler() const
Definition LogHandler.cpp:562
bool useLogFile() const
Definition LogHandler.cpp:550
qsizetype getCriticalLogCapacity() const
Definition LogHandler.cpp:208
const LogEventHandler * getEventHandler() const
Definition LogHandler.cpp:125
void setCriticalLogCapacity(int pSize)
Definition LogHandler.cpp:214
QByteArray getCriticalLogWindow()
Definition LogHandler.cpp:187
void setLogFile(bool pEnable)
Definition LogHandler.cpp:506
bool copy(const QString &pDest) const
Definition LogHandler.cpp:426
void setAutoRemove(bool pRemove)
Definition LogHandler.cpp:137
bool removeOtherLogFiles() const
Definition LogHandler.cpp:493
friend QDebug operator<<(QDebug, const LogHandler &)
Definition LogHandler.h:159
friend class Env
Definition LogHandler.h:71
QByteArray getBacklog(bool pAll=false)
Definition LogHandler.cpp:180
QDateTime getCurrentLogFileDate() const
Definition LogHandler.cpp:237
static QDateTime getFileDate(const QFileInfo &pInfo)
Definition LogHandler.cpp:221
QFileInfoList getOtherLogFiles() const
Definition LogHandler.cpp:460
virtual ~LogHandler()
Definition LogHandler.cpp:55
bool copyOther(const QString &pSource, const QString &pDest) const
Definition LogHandler.cpp:439
bool isInstalled() const
Definition LogHandler.cpp:131
void reset()
Definition LogHandler.cpp:68
QDebug warning() const
Definition LogHandler.cpp:670
MessageLogger(const char *pFile, int pLine, const char *pFunction, const std::function< const QLoggingCategory &()> &pCategory)
Definition LogHandler.cpp:645
QDebug debug() const
Definition LogHandler.cpp:658
QDebug info() const
Definition LogHandler.cpp:664
QDebug critical() const
Definition LogHandler.cpp:652
Defines the AccessRight and AccessRole enum.
Definition CommandApdu.h:17
QDebug operator<<(QDebug pDbg, const CommandApdu &pCommandApdu)
Definition CommandApdu.h:96