Add timestamps to app logs
This commit is contained in:
parent
76622412c1
commit
0fe17917c9
@ -207,6 +207,8 @@ void AppLogController::append(const QString &category, const QString &message, L
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDateTime timestamp = QDateTime::currentDateTime();
|
||||||
|
|
||||||
if (m_logFile.isOpen()) {
|
if (m_logFile.isOpen()) {
|
||||||
QHash<LogLevel, QString> t = {
|
QHash<LogLevel, QString> t = {
|
||||||
{LogLevelDebug, "D"},
|
{LogLevelDebug, "D"},
|
||||||
@ -214,12 +216,12 @@ void AppLogController::append(const QString &category, const QString &message, L
|
|||||||
{LogLevelWarning, "W"},
|
{LogLevelWarning, "W"},
|
||||||
{LogLevelCritical, "C"}
|
{LogLevelCritical, "C"}
|
||||||
};
|
};
|
||||||
QString line = QString("%0: %1: %2\n").arg(t.value(level), category, message);
|
QString line = QString("%0:%1:%2: %3\n").arg(timestamp.toString("yyyy-MM-dd hh:mm:ss.zzz"), t.value(level), category, message);
|
||||||
m_logFile.write(line.toUtf8());
|
m_logFile.write(line.toUtf8());
|
||||||
m_logFile.flush();
|
m_logFile.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
emit messageAdded(category, message, level);
|
emit messageAdded(timestamp, category, message, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppLogController::updateFilters()
|
void AppLogController::updateFilters()
|
||||||
@ -282,24 +284,20 @@ LogMessages::LogMessages(QObject *parent):
|
|||||||
while (!f.atEnd()) {
|
while (!f.atEnd()) {
|
||||||
QByteArray line = f.readLine().trimmed();
|
QByteArray line = f.readLine().trimmed();
|
||||||
QList<QByteArray> parts = line.split(':');
|
QList<QByteArray> parts = line.split(':');
|
||||||
if (parts.length() < 2) {
|
if (parts.length() < 6) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LogMessage message;
|
LogMessage message;
|
||||||
|
QString timestampString = parts.takeFirst();
|
||||||
|
timestampString.append(":" + parts.takeFirst());
|
||||||
|
timestampString.append(":" + parts.takeFirst());
|
||||||
|
message.timestamp = QDateTime::fromString(timestampString, "yyyy-MM-dd hh:mm:ss.zzz");
|
||||||
message.level = map.value(parts.takeFirst());
|
message.level = map.value(parts.takeFirst());
|
||||||
message.category = parts.takeFirst();
|
message.category = parts.takeFirst();
|
||||||
message.message = parts.join(":");
|
message.message = parts.join(":");
|
||||||
m_messages.append(message);
|
m_messages.append(message);
|
||||||
}
|
}
|
||||||
connect(AppLogController::instance(), &AppLogController::messageAdded, this, [=](const QString &category, const QString &message, AppLogController::LogLevel level){
|
connect(AppLogController::instance(), &AppLogController::messageAdded, this, &LogMessages::append);
|
||||||
beginInsertRows(QModelIndex(), m_messages.count(), m_messages.count());
|
|
||||||
LogMessage msg;
|
|
||||||
msg.category = category;
|
|
||||||
msg.message = message;
|
|
||||||
msg.level = level;
|
|
||||||
m_messages.append(msg);
|
|
||||||
endInsertRows();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int LogMessages::rowCount(const QModelIndex &parent) const
|
int LogMessages::rowCount(const QModelIndex &parent) const
|
||||||
@ -310,15 +308,18 @@ int LogMessages::rowCount(const QModelIndex &parent) const
|
|||||||
|
|
||||||
QVariant LogMessages::data(const QModelIndex &index, int role) const
|
QVariant LogMessages::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
|
LogMessage message = m_messages.at(index.row());
|
||||||
switch (role) {
|
switch (role) {
|
||||||
|
case RoleTimestamp:
|
||||||
|
return message.timestamp;
|
||||||
case RoleCategory:
|
case RoleCategory:
|
||||||
return m_messages.at(index.row()).category;
|
return message.category;
|
||||||
case RoleMessage:
|
case RoleMessage:
|
||||||
return m_messages.at(index.row()).message;
|
return message.message;
|
||||||
case RoleLevel:
|
case RoleLevel:
|
||||||
return m_messages.at(index.row()).level;
|
return message.level;
|
||||||
case RoleText:
|
case RoleText:
|
||||||
return m_messages.at(index.row()).category + ": " + m_messages.at(index.row()).message;
|
return message.timestamp.toString("hh:mm:ss") + ": " + message.category + ": " + message.message;
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@ -326,6 +327,7 @@ QVariant LogMessages::data(const QModelIndex &index, int role) const
|
|||||||
QHash<int, QByteArray> LogMessages::roleNames() const
|
QHash<int, QByteArray> LogMessages::roleNames() const
|
||||||
{
|
{
|
||||||
QHash<int, QByteArray> roles;
|
QHash<int, QByteArray> roles;
|
||||||
|
roles.insert(RoleTimestamp, "timestamp");
|
||||||
roles.insert(RoleCategory, "category");
|
roles.insert(RoleCategory, "category");
|
||||||
roles.insert(RoleMessage, "message");
|
roles.insert(RoleMessage, "message");
|
||||||
roles.insert(RoleLevel, "level");
|
roles.insert(RoleLevel, "level");
|
||||||
@ -333,10 +335,11 @@ QHash<int, QByteArray> LogMessages::roleNames() const
|
|||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogMessages::append(const QString &category, const QString &message, AppLogController::LogLevel level)
|
void LogMessages::append(const QDateTime ×tamp, const QString &category, const QString &message, AppLogController::LogLevel level)
|
||||||
{
|
{
|
||||||
beginInsertRows(QModelIndex(), m_messages.count(), m_messages.count());
|
beginInsertRows(QModelIndex(), m_messages.count(), m_messages.count());
|
||||||
LogMessage msg;
|
LogMessage msg;
|
||||||
|
msg.timestamp = timestamp;
|
||||||
msg.category = category;
|
msg.category = category;
|
||||||
msg.message = message;
|
msg.message = message;
|
||||||
msg.level = level;
|
msg.level = level;
|
||||||
|
|||||||
@ -36,6 +36,7 @@
|
|||||||
#include <QQmlEngine>
|
#include <QQmlEngine>
|
||||||
#include <QAbstractListModel>
|
#include <QAbstractListModel>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
class LogMessages;
|
class LogMessages;
|
||||||
class LoggingCategories;
|
class LoggingCategories;
|
||||||
@ -80,7 +81,7 @@ signals:
|
|||||||
void logToModelChanged();
|
void logToModelChanged();
|
||||||
|
|
||||||
void categoryChanged(const QString &category, LogLevel level);
|
void categoryChanged(const QString &category, LogLevel level);
|
||||||
void messageAdded(const QString &category, const QString &message, LogLevel level);
|
void messageAdded(const QDateTime ×tamp, const QString &category, const QString &message, LogLevel level);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AppLogController(QObject *parent = nullptr);
|
explicit AppLogController(QObject *parent = nullptr);
|
||||||
@ -107,6 +108,7 @@ class LogMessages: public QAbstractListModel
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
enum Roles {
|
enum Roles {
|
||||||
|
RoleTimestamp,
|
||||||
RoleCategory,
|
RoleCategory,
|
||||||
RoleMessage,
|
RoleMessage,
|
||||||
RoleLevel,
|
RoleLevel,
|
||||||
@ -115,6 +117,7 @@ public:
|
|||||||
Q_ENUM(Roles)
|
Q_ENUM(Roles)
|
||||||
|
|
||||||
struct LogMessage {
|
struct LogMessage {
|
||||||
|
QDateTime timestamp;
|
||||||
QString category;
|
QString category;
|
||||||
QString message;
|
QString message;
|
||||||
AppLogController::LogLevel level;
|
AppLogController::LogLevel level;
|
||||||
@ -126,7 +129,8 @@ public:
|
|||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
void append(const QString &category, const QString &message, AppLogController::LogLevel level);
|
private slots:
|
||||||
|
void append(const QDateTime ×tamp, const QString &category, const QString &message, AppLogController::LogLevel level);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<LogMessage> m_messages;
|
QList<LogMessage> m_messages;
|
||||||
|
|||||||
@ -51,6 +51,7 @@ Page {
|
|||||||
ListView {
|
ListView {
|
||||||
id: listView
|
id: listView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
clip: true
|
||||||
|
|
||||||
ScrollBar.vertical: ScrollBar {}
|
ScrollBar.vertical: ScrollBar {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user