mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Fix key when inserting new logger in LoggerMap,
Prepare logBuffer-JSON snapshot view in LoggerManager, Increase buffered loglines to 500
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QAtomicInteger>
|
#include <QAtomicInteger>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QJsonArray>
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||||
#include <QRecursiveMutex>
|
#include <QRecursiveMutex>
|
||||||
@@ -14,8 +15,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// stl includes
|
// stl includes
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#endif
|
#endif
|
||||||
@@ -59,7 +58,7 @@ public:
|
|||||||
QString function;
|
QString function;
|
||||||
unsigned int line;
|
unsigned int line;
|
||||||
QString fileName;
|
QString fileName;
|
||||||
uint64_t utime;
|
qint64 utime;
|
||||||
QString message;
|
QString message;
|
||||||
LogLevel level;
|
LogLevel level;
|
||||||
QString levelString;
|
QString levelString;
|
||||||
@@ -74,7 +73,7 @@ public:
|
|||||||
void setMinLevel(LogLevel level) { _minLevel = static_cast<int>(level); }
|
void setMinLevel(LogLevel level) { _minLevel = static_cast<int>(level); }
|
||||||
LogLevel getMinLevel() const { return static_cast<LogLevel>(int(_minLevel)); }
|
LogLevel getMinLevel() const { return static_cast<LogLevel>(int(_minLevel)); }
|
||||||
QString getName() const { return _name; }
|
QString getName() const { return _name; }
|
||||||
QString getSubName() const { return _subname; }
|
QString getSubName() const { return _subName; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void newLogMessage(Logger::T_LOG_MESSAGE);
|
void newLogMessage(Logger::T_LOG_MESSAGE);
|
||||||
@@ -95,7 +94,7 @@ private:
|
|||||||
static QAtomicInteger<int> GLOBAL_MIN_LOG_LEVEL;
|
static QAtomicInteger<int> GLOBAL_MIN_LOG_LEVEL;
|
||||||
|
|
||||||
const QString _name;
|
const QString _name;
|
||||||
const QString _subname;
|
const QString _subName;
|
||||||
const bool _syslogEnabled;
|
const bool _syslogEnabled;
|
||||||
const unsigned _loggerId;
|
const unsigned _loggerId;
|
||||||
|
|
||||||
@@ -109,15 +108,15 @@ class LoggerManager : public QObject
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static LoggerManager* getInstance();
|
static LoggerManager* getInstance();
|
||||||
const QList<Logger::T_LOG_MESSAGE>* getLogMessageBuffer() const { return &_logMessageBuffer; }
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handleNewLogMessage(const Logger::T_LOG_MESSAGE&);
|
void handleNewLogMessage(const Logger::T_LOG_MESSAGE&);
|
||||||
|
QJsonArray getLogMessageBuffer(Logger::LogLevel filter=Logger::UNSET) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void newLogMessage(const Logger::T_LOG_MESSAGE&);
|
void newLogMessage(const Logger::T_LOG_MESSAGE&);
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
LoggerManager();
|
LoggerManager();
|
||||||
|
|
||||||
QList<Logger::T_LOG_MESSAGE> _logMessageBuffer;
|
QList<Logger::T_LOG_MESSAGE> _logMessageBuffer;
|
||||||
|
@@ -1984,24 +1984,10 @@ void JsonAPI::incommingLogMessage(const Logger::T_LOG_MESSAGE &msg)
|
|||||||
if (!_streaming_logging_activated)
|
if (!_streaming_logging_activated)
|
||||||
{
|
{
|
||||||
_streaming_logging_activated = true;
|
_streaming_logging_activated = true;
|
||||||
const QList<Logger::T_LOG_MESSAGE> *logBuffer = LoggerManager::getInstance()->getLogMessageBuffer();
|
QMetaObject::invokeMethod(LoggerManager::getInstance(), "getLogMessageBuffer",
|
||||||
for (int i = 0; i < logBuffer->length(); i++)
|
Qt::DirectConnection,
|
||||||
{
|
Q_RETURN_ARG(QJsonArray, messageArray),
|
||||||
//Only present records of the current log-level
|
Q_ARG(Logger::LogLevel, _log->getLogLevel()));
|
||||||
if ( logBuffer->at(i).level >= _log->getLogLevel())
|
|
||||||
{
|
|
||||||
message["loggerName"] = logBuffer->at(i).loggerName;
|
|
||||||
message["loggerSubName"] = logBuffer->at(i).loggerSubName;
|
|
||||||
message["function"] = logBuffer->at(i).function;
|
|
||||||
message["line"] = QString::number(logBuffer->at(i).line);
|
|
||||||
message["fileName"] = logBuffer->at(i).fileName;
|
|
||||||
message["message"] = logBuffer->at(i).message;
|
|
||||||
message["levelString"] = logBuffer->at(i).levelString;
|
|
||||||
message["utime"] = QString::number(logBuffer->at(i).utime);
|
|
||||||
|
|
||||||
messageArray.append(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
#include <utils/FileUtils.h>
|
#include <utils/FileUtils.h>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
@@ -15,7 +14,8 @@
|
|||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QMutexLocker>
|
#include <QMutexLocker>
|
||||||
#include <QThreadStorage>
|
#include <QThreadStorage>
|
||||||
#include <time.h>
|
#include <QJsonObject>
|
||||||
|
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||||
QRecursiveMutex Logger::MapLock;
|
QRecursiveMutex Logger::MapLock;
|
||||||
@@ -38,6 +38,7 @@ const size_t MAX_IDENTIFICATION_LENGTH = 22;
|
|||||||
QAtomicInteger<unsigned int> LoggerCount = 0;
|
QAtomicInteger<unsigned int> LoggerCount = 0;
|
||||||
QAtomicInteger<unsigned int> LoggerId = 0;
|
QAtomicInteger<unsigned int> LoggerId = 0;
|
||||||
|
|
||||||
|
const int MAX_LOG_MSG_BUFFERED = 500;
|
||||||
const int MaxRepeatCountSize = 200;
|
const int MaxRepeatCountSize = 200;
|
||||||
QThreadStorage<int> RepeatCount;
|
QThreadStorage<int> RepeatCount;
|
||||||
QThreadStorage<Logger::T_LOG_MESSAGE> RepeatMessage;
|
QThreadStorage<Logger::T_LOG_MESSAGE> RepeatMessage;
|
||||||
@@ -51,8 +52,7 @@ Logger* Logger::getInstance(const QString & name, const QString & subName, Logge
|
|||||||
if (log == nullptr)
|
if (log == nullptr)
|
||||||
{
|
{
|
||||||
log = new Logger(name, subName, minLevel);
|
log = new Logger(name, subName, minLevel);
|
||||||
LoggerMap.insert(name, log); // compat version, replace it with following line if we have 100% c++11
|
LoggerMap.insert(name + subName, log);
|
||||||
//LoggerMap.emplace(name, log); // not compat with older linux distro's e.g. wheezy
|
|
||||||
connect(log, &Logger::newLogMessage, LoggerManager::getInstance(), &LoggerManager::handleNewLogMessage);
|
connect(log, &Logger::newLogMessage, LoggerManager::getInstance(), &LoggerManager::handleNewLogMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ Logger::LogLevel Logger::getLogLevel(const QString & name, const QString & subNa
|
|||||||
Logger::Logger (const QString & name, const QString & subName, LogLevel minLevel)
|
Logger::Logger (const QString & name, const QString & subName, LogLevel minLevel)
|
||||||
: QObject()
|
: QObject()
|
||||||
, _name(name)
|
, _name(name)
|
||||||
, _subname(subName)
|
, _subName(subName)
|
||||||
, _syslogEnabled(true)
|
, _syslogEnabled(true)
|
||||||
, _loggerId(LoggerId++)
|
, _loggerId(LoggerId++)
|
||||||
, _minLevel(static_cast<int>(minLevel))
|
, _minLevel(static_cast<int>(minLevel))
|
||||||
@@ -161,7 +161,7 @@ void Logger::write(const Logger::T_LOG_MESSAGE & message)
|
|||||||
.toStdString()
|
.toStdString()
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
newLogMessage(message);
|
emit newLogMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::Message(LogLevel level, const char* sourceFile, const char* func, unsigned int line, const char* fmt, ...)
|
void Logger::Message(LogLevel level, const char* sourceFile, const char* func, unsigned int line, const char* fmt, ...)
|
||||||
@@ -195,7 +195,7 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (RepeatMessage.localData().loggerName == _name &&
|
if (RepeatMessage.localData().loggerName == _name &&
|
||||||
RepeatMessage.localData().loggerSubName == _subname &&
|
RepeatMessage.localData().loggerSubName == _subName &&
|
||||||
RepeatMessage.localData().function == func &&
|
RepeatMessage.localData().function == func &&
|
||||||
RepeatMessage.localData().message == msg &&
|
RepeatMessage.localData().message == msg &&
|
||||||
RepeatMessage.localData().line == line)
|
RepeatMessage.localData().line == line)
|
||||||
@@ -213,7 +213,7 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
|||||||
Logger::T_LOG_MESSAGE logMsg;
|
Logger::T_LOG_MESSAGE logMsg;
|
||||||
|
|
||||||
logMsg.loggerName = _name;
|
logMsg.loggerName = _name;
|
||||||
logMsg.loggerSubName = _subname;
|
logMsg.loggerSubName = _subName;
|
||||||
logMsg.function = QString(func);
|
logMsg.function = QString(func);
|
||||||
logMsg.line = line;
|
logMsg.line = line;
|
||||||
logMsg.fileName = FileUtils::getBaseName(sourceFile);
|
logMsg.fileName = FileUtils::getBaseName(sourceFile);
|
||||||
@@ -233,11 +233,36 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
|||||||
|
|
||||||
LoggerManager::LoggerManager()
|
LoggerManager::LoggerManager()
|
||||||
: QObject()
|
: QObject()
|
||||||
, _loggerMaxMsgBufferSize(200)
|
, _loggerMaxMsgBufferSize(MAX_LOG_MSG_BUFFERED)
|
||||||
{
|
{
|
||||||
_logMessageBuffer.reserve(_loggerMaxMsgBufferSize);
|
_logMessageBuffer.reserve(_loggerMaxMsgBufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QJsonArray LoggerManager::getLogMessageBuffer(Logger::LogLevel filter) const
|
||||||
|
{
|
||||||
|
QJsonArray messageArray;
|
||||||
|
{
|
||||||
|
for (const auto &logLine : std::as_const(_logMessageBuffer))
|
||||||
|
{
|
||||||
|
if (logLine.level >= filter)
|
||||||
|
{
|
||||||
|
QJsonObject message;
|
||||||
|
message["loggerName"] = logLine.loggerName;
|
||||||
|
message["loggerSubName"] = logLine.loggerSubName;
|
||||||
|
message["function"] = logLine.function;
|
||||||
|
message["line"] = QString::number(logLine.line);
|
||||||
|
message["fileName"] = logLine.fileName;
|
||||||
|
message["message"] = logLine.message;
|
||||||
|
message["levelString"] = logLine.levelString;
|
||||||
|
message["utime"] = QString::number(logLine.utime);
|
||||||
|
|
||||||
|
messageArray.append(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return messageArray;
|
||||||
|
}
|
||||||
|
|
||||||
void LoggerManager::handleNewLogMessage(const Logger::T_LOG_MESSAGE & msg)
|
void LoggerManager::handleNewLogMessage(const Logger::T_LOG_MESSAGE & msg)
|
||||||
{
|
{
|
||||||
_logMessageBuffer.push_back(msg);
|
_logMessageBuffer.push_back(msg);
|
||||||
|
Reference in New Issue
Block a user