diff options
-rw-r--r-- | logger/QsLog.cpp | 31 | ||||
-rw-r--r-- | logger/QsLog.h | 6 |
2 files changed, 30 insertions, 7 deletions
diff --git a/logger/QsLog.cpp b/logger/QsLog.cpp index 87d7a412..68493963 100644 --- a/logger/QsLog.cpp +++ b/logger/QsLog.cpp @@ -37,11 +37,7 @@ namespace QsLogging { typedef QList<Destination *> DestinationList; -static const char *LevelStrings[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" - "UNKNOWN"}; - -// not using Qt::ISODate because we need the milliseconds too -static const QString fmtDateTime("hhhh:mm:ss.zzz"); +static const char *LevelStrings[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "UNKNOWN"}; static const char *LevelToText(Level theLevel) { @@ -62,10 +58,12 @@ public: QMutex logMutex; Level level; DestinationList destList; + QDateTime startTime; }; Logger::Logger() : d(new LoggerImpl) { + d->startTime = QDateTime::currentDateTime(); } Logger::~Logger() @@ -89,13 +87,32 @@ Level Logger::loggingLevel() const return d->level; } +QDateTime Logger::timeOfStart() const +{ + return d->startTime; +} + +qint64 Logger::timeSinceStart() const +{ + return d->startTime.msecsTo(QDateTime::currentDateTime()); +} + + //! creates the complete log message and passes it to the logger void Logger::Helper::writeToLog() { const char *const levelName = LevelToText(level); - const QString completeMessage(QString("%1\t%2").arg(levelName, 5).arg(buffer)); - Logger &logger = Logger::instance(); + qint64 msecstotal = logger.timeSinceStart(); + qint64 seconds = msecstotal / 1000; + qint64 msecs = msecstotal % 1000; + QString foo; + char buf[1024]; + + ::snprintf(buf, 1024, "%5lld.%03lld", seconds, msecs); + + const QString completeMessage(QString("%1\t%2\t%3").arg(buf).arg(levelName, 5).arg(buffer)); + QMutexLocker lock(&logger.d->logMutex); logger.write(completeMessage); } diff --git a/logger/QsLog.h b/logger/QsLog.h index 6c96423c..2b7984e6 100644 --- a/logger/QsLog.h +++ b/logger/QsLog.h @@ -27,6 +27,7 @@ #include <QDebug> #include <QString> +#include <QDateTime> namespace QsLogging { @@ -60,6 +61,11 @@ public: void setLoggingLevel(Level newLevel); //! The default level is INFO Level loggingLevel() const; + //! msecs since the logger was initialized + qint64 timeSinceStart() const; + //! time when the logger was initialized + QDateTime timeOfStart() const; + //! The helper forwards the streaming to QDebug and builds the final //! log message. |