AusweisApp2
LogHandler.h
gehe zur Dokumentation dieser Datei
1 /*
2  * \brief Logging handler of QtMessageHandler
3  *
4  * \copyright Copyright (c) 2014-2020 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #pragma once
8 
9 #include "Env.h"
10 
11 #include <QContiguousCache>
12 #include <QDateTime>
13 #include <QDebug>
14 #include <QFileInfoList>
15 #include <QLoggingCategory>
16 #include <QMessageLogContext>
17 #include <QMutex>
18 #include <QStringList>
19 #include <QTemporaryFile>
20 
21 #define spawnMessageLogger(category)\
22  QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName())
23 
24 class test_LogHandler;
25 class test_LogModel;
26 
27 namespace governikus
28 {
29 
31  : public QObject
32 {
33  Q_OBJECT
34  friend class Env;
35  friend class ::test_LogHandler;
36  friend class ::test_LogModel;
37 
38  struct LogWindowEntry
39  {
40  qint64 mPosition;
41  qint64 mLength;
42  };
43 
44  private:
45  static QString getLogFileTemplate();
46 
47  const bool mEnvPattern;
48  const int mFunctionFilenameSize;
49  qint64 mBacklogPosition;
50  bool mCriticalLog;
51  QContiguousCache<LogWindowEntry> mCriticalLogWindow;
52  QStringList mCriticalLogIgnore;
53  const QString mMessagePattern, mDefaultMessagePattern;
54  QTemporaryFile mLogFile;
55  QtMessageHandler mHandler;
56  bool mUseHandler;
57  const QByteArray mFilePrefix;
58  QMutex mMutex;
59 
60  inline void copyMessageLogContext(const QMessageLogContext& pSource, QMessageLogContext& pDestination, const QByteArray& pFilename = QByteArray(), const QByteArray& pFunction = QByteArray(), const QByteArray& pCategory = QByteArray());
61  inline void logToFile(const QString& pOutput);
62  inline QByteArray formatFunction(const char* const pFunction, const QByteArray& pFilename, int pLine) const;
63  inline QByteArray formatFilename(const char* const pFilename) const;
64  inline QByteArray formatCategory(const QByteArray& pCategory) const;
65 
66  QString getPaddedLogMsg(const QMessageLogContext& pContext, const QString& pMsg);
67  void handleMessage(QtMsgType pType, const QMessageLogContext& pContext, const QString& pMsg);
68  void handleLogWindow(QtMsgType pType, const char* pCategory, const QString& pMsg);
69  void removeOldLogfiles();
70  QByteArray readLogFile(qint64 pStart, qint64 pLength = -1);
71 
72  static void messageHandler(QtMsgType pType, const QMessageLogContext& pContext, const QString& pMsg);
73  friend QDebug operator<<(QDebug, const LogHandler&);
74 
75  protected:
76  LogHandler();
77  virtual ~LogHandler();
78  static LogHandler& getInstance();
79 
80 #ifndef QT_NO_DEBUG
81 
82  public:
83 #endif
84  void reset();
85  bool isInitialized() const;
86 
87  public:
88  void init();
89 
90  void setAutoRemove(bool pRemove);
91  bool copy(const QString& pDest);
92  bool copyOther(const QString& pSource, const QString& pDest) const;
93  void resetBacklog();
94  QByteArray getBacklog(bool pAll = false);
95  QByteArray getCriticalLogWindow();
96  bool hasCriticalLog() const;
97  int getCriticalLogCapacity() const;
98  void setCriticalLogCapacity(int pSize);
99 
100  static QDateTime getFileDate(const QFileInfo& pInfo);
101  QDateTime getCurrentLogfileDate() const;
102  QFileInfoList getOtherLogfiles() const;
103  bool removeOtherLogfiles();
104  void setLogfile(bool pEnable);
105  bool useLogfile() const;
106  void setUseHandler(bool pEnable);
107  bool useHandler() const;
108 
109  Q_SIGNALS:
114  void fireLog(const QString& pMsg);
115  void fireRawLog(const QString& pMsg, const QString& pCategoryName);
116 };
117 
118 inline QDebug operator<<(QDebug pDbg, const governikus::LogHandler& pHandler)
119 {
120  QDebugStateSaver saver(pDbg);
121  pDbg.nospace() << pHandler.mLogFile.fileName();
122  return pDbg.space();
123 }
124 
125 
126 } // namespace governikus
bool useHandler() const
Definition: LogHandler.cpp:488
void setAutoRemove(bool pRemove)
Definition: LogHandler.cpp:111
void resetBacklog()
Definition: LogHandler.cpp:209
QByteArray getCriticalLogWindow()
Definition: LogHandler.cpp:157
virtual ~LogHandler()
Definition: LogHandler.cpp:58
void reset()
Definition: LogHandler.cpp:77
static QDateTime getFileDate(const QFileInfo &pInfo)
Definition: LogHandler.cpp:191
void fireRawLog(const QString &pMsg, const QString &pCategoryName)
Definition: moc_LogHandler.cpp:148
bool removeOtherLogfiles()
Definition: LogHandler.cpp:436
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:14
static LogHandler & getInstance()
Definition: LogHandler.cpp:64
QDateTime getCurrentLogfileDate() const
Definition: LogHandler.cpp:203
int getCriticalLogCapacity() const
Definition: LogHandler.cpp:178
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...
Definition: moc_LogHandler.cpp:141
void init()
Definition: LogHandler.cpp:88
bool isInitialized() const
Definition: LogHandler.cpp:105
void setCriticalLogCapacity(int pSize)
Definition: LogHandler.cpp:184
void setUseHandler(bool pEnable)
Definition: LogHandler.cpp:482
bool hasCriticalLog() const
Definition: LogHandler.cpp:172
QFileInfoList getOtherLogfiles() const
Definition: LogHandler.cpp:407
Definition: Env.h:38
bool copy(const QString &pDest)
Definition: LogHandler.cpp:373
void setLogfile(bool pEnable)
Definition: LogHandler.cpp:449
QDebug operator<<(QDebug pDbg, const CardInfo &pCardInfo)
Definition: CardInfo.cpp:259
friend QDebug operator<<(QDebug, const LogHandler &)
Definition: LogHandler.h:118
bool copyOther(const QString &pSource, const QString &pDest) const
Definition: LogHandler.cpp:386
bool useLogfile() const
Definition: LogHandler.cpp:476
Definition: LogHandler.h:30
QByteArray getBacklog(bool pAll=false)
Definition: LogHandler.cpp:150
Definition: test_LogHandler.cpp:25
Definition: test_LogModel.cpp:17