From c9aeb8896ae578515c217b9a08988156b4d62f1e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 26 Mar 2015 09:44:00 +0100 Subject: Resource crashhandler and logging facilities. --- common/CMakeLists.txt | 1 + common/log.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++ common/log.h | 17 ++++++++++++ common/resourceaccess.cpp | 5 ++-- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 common/log.cpp create mode 100644 common/log.h (limited to 'common') diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 429bad7..656f987 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -23,6 +23,7 @@ else (STORAGE_unqlite) endif (STORAGE_unqlite) set(command_SRCS + log.cpp entitybuffer.cpp clientapi.cpp commands.cpp diff --git a/common/log.cpp b/common/log.cpp new file mode 100644 index 0000000..1d93404 --- /dev/null +++ b/common/log.cpp @@ -0,0 +1,70 @@ +#include "log.h" + +#include +#include +#include +#include +#include + +class DebugStream: public QIODevice +{ +public: + QString m_location; + DebugStream() + : QIODevice() + { + open(WriteOnly); + } + virtual ~DebugStream(){}; + + bool isSequential() const { return true; } + qint64 readData(char *, qint64) { return 0; /* eof */ } + qint64 readLineData(char *, qint64) { return 0; /* eof */ } + qint64 writeData(const char *data, qint64 len) + { + const QByteArray buf = QByteArray::fromRawData(data, len); + // if (!qgetenv("IMAP_TRACE").isEmpty()) { + // qt_message_output(QtDebugMsg, buf.trimmed().constData()); + std::cout << buf.trimmed().constData() << std::endl; + // } + return len; + } +private: + Q_DISABLE_COPY(DebugStream) +}; + +QDebug debugStream(DebugLevel debugLevel, int line, const char* file, const char* function) +{ + static DebugStream stream; + QDebug debug(&stream); + + static QByteArray programName; + if (programName.isEmpty()) { + if (QCoreApplication::instance()) + programName = QCoreApplication::instance()->applicationName().toLocal8Bit(); + else + programName = ""; + } + + QString prefix; + switch (debugLevel) { + case DebugLevel::Trace: + prefix = "Trace:"; + break; + case DebugLevel::Log: + prefix = "Log:"; + break; + case DebugLevel::Warning: + prefix = "Warning:"; + break; + case DebugLevel::Error: + prefix = "Error:"; + break; + default: + break; + }; + + debug << prefix + QString(" %1(%2) %3:").arg(QString::fromLatin1(programName)).arg(unsigned(getpid())).arg(function) /* << file << ":" << line */; + + return debug; +} diff --git a/common/log.h b/common/log.h new file mode 100644 index 0000000..8d3dc75 --- /dev/null +++ b/common/log.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +enum DebugLevel { + Trace, + Log, + Warning, + Error +}; + +QDebug debugStream(DebugLevel debugLevel, int line, const char* file, const char* function); + +#define Trace() debugStream(DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO) +#define Log() debugStream(DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO) +#define Warning() debugStream(DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO) +#define Error() debugStream(DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO) diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp index ffe716b..59cbece 100644 --- a/common/resourceaccess.cpp +++ b/common/resourceaccess.cpp @@ -20,12 +20,12 @@ #include "resourceaccess.h" -#include "common/console.h" #include "common/commands.h" #include "common/commandcompletion_generated.h" #include "common/handshake_generated.h" #include "common/revisionupdate_generated.h" #include "common/synchronize_generated.h" +#include "log.h" #include #include @@ -343,8 +343,7 @@ void ResourceAccess::callCallbacks(int id) void ResourceAccess::log(const QString &message) { - qDebug() << d->resourceName + ": " + message; - // Console::main()->log(d->resourceName + ": " + message); + Log() << d->resourceName + ": " + message; } } -- cgit v1.2.3