From cd9d37aac402b0edd0f12b66fd7f2fdd5fe6dff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 2 Feb 2015 02:14:14 +0100 Subject: SCRATCH nuke the overcomplicated logger, use a simple one. --- logger/QsDebugOutput.cpp | 52 ---------------- logger/QsDebugOutput.h | 34 ---------- logger/QsLog.cpp | 159 ----------------------------------------------- logger/QsLog.h | 138 ---------------------------------------- logger/QsLogDest.cpp | 104 ------------------------------- logger/QsLogDest.h | 53 ---------------- 6 files changed, 540 deletions(-) delete mode 100644 logger/QsDebugOutput.cpp delete mode 100644 logger/QsDebugOutput.h delete mode 100644 logger/QsLog.cpp delete mode 100644 logger/QsLog.h delete mode 100644 logger/QsLogDest.cpp delete mode 100644 logger/QsLogDest.h (limited to 'logger') diff --git a/logger/QsDebugOutput.cpp b/logger/QsDebugOutput.cpp deleted file mode 100644 index d68cd5e9..00000000 --- a/logger/QsDebugOutput.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "QsDebugOutput.h" -#include -#include - -#if defined(Q_OS_WIN) -#define WIN32_LEAN_AND_MEAN -#include -void QsDebugOutput::output(const QString &message) -{ - OutputDebugStringW(reinterpret_cast(message.utf16())); - OutputDebugStringW(L"\n"); -} -#elif defined(Q_OS_SYMBIAN) -#include -void QsDebugOutput::output(const QString &message) -{ - TPtrC8 symbianMessage(reinterpret_cast(qPrintable(message))); - RDebug::RawPrint(symbianMessage); -} -#elif defined(Q_OS_UNIX) -#include -void QsDebugOutput::output(const QString &message) -{ - fprintf(stderr, "%s\n", qPrintable(message)); - fflush(stderr); -} -#endif diff --git a/logger/QsDebugOutput.h b/logger/QsDebugOutput.h deleted file mode 100644 index 8c759a6d..00000000 --- a/logger/QsDebugOutput.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#pragma once - -class QString; - -class QsDebugOutput -{ -public: - static void output(const QString &a_message); -}; diff --git a/logger/QsLog.cpp b/logger/QsLog.cpp deleted file mode 100644 index 68493963..00000000 --- a/logger/QsLog.cpp +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "QsLog.h" -#include "QsLogDest.h" -#include -#include -#include -#include -#include -#include -#include - -namespace QsLogging -{ -typedef QList DestinationList; - -static const char *LevelStrings[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "UNKNOWN"}; - -static const char *LevelToText(Level theLevel) -{ - if (theLevel > FatalLevel) - { - assert(!"bad log level"); - return LevelStrings[UnknownLevel]; - } - return LevelStrings[theLevel]; -} - -class LoggerImpl -{ -public: - LoggerImpl() : level(InfoLevel) - { - } - QMutex logMutex; - Level level; - DestinationList destList; - QDateTime startTime; -}; - -Logger::Logger() : d(new LoggerImpl) -{ - d->startTime = QDateTime::currentDateTime(); -} - -Logger::~Logger() -{ - delete d; -} - -void Logger::addDestination(Destination *destination) -{ - assert(destination); - d->destList.push_back(destination); -} - -void Logger::setLoggingLevel(Level newLevel) -{ - d->level = newLevel; -} - -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); - 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); -} - -Logger::Helper::Helper(Level logLevel) : level(logLevel), qtDebug(&buffer) -{ -} - -Logger::Helper::~Helper() -{ - try - { - writeToLog(); - } - catch (std::exception &e) - { - // you shouldn't throw exceptions from a sink - Q_UNUSED(e); - assert(!"exception in logger helper destructor"); - throw; - } -} - -//! sends the message to all the destinations -void Logger::write(const QString &message) -{ - for (DestinationList::iterator it = d->destList.begin(), endIt = d->destList.end(); - it != endIt; ++it) - { - if (!(*it)) - { - assert(!"null log destination"); - continue; - } - (*it)->write(message); - } -} - -void Logger::removeDestination(Destination* destination) -{ - d->destList.removeAll(destination); -} - -} // end namespace diff --git a/logger/QsLog.h b/logger/QsLog.h deleted file mode 100644 index 2b7984e6..00000000 --- a/logger/QsLog.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#pragma once - -#include -#include -#include - -namespace QsLogging -{ -class Destination; -enum Level -{ - TraceLevel = 0, - DebugLevel, - InfoLevel, - WarnLevel, - ErrorLevel, - FatalLevel, - UnknownLevel -}; - -class LoggerImpl; // d pointer -class Logger -{ -public: - static Logger &instance() - { - static Logger staticLog; - return staticLog; - } - - //! Adds a log message destination. Don't add null destinations. - void addDestination(Destination *destination); - //! Removes the given destination from the logger. - void removeDestination(Destination* destination); - //! Logging at a level < 'newLevel' will be ignored - 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. - class Helper - { - public: - explicit Helper(Level logLevel); - ~Helper(); - QDebug &stream() - { - return qtDebug; - } - - private: - void writeToLog(); - - Level level; - QString buffer; - QDebug qtDebug; - }; - -private: - Logger(); - Logger(const Logger &); - Logger &operator=(const Logger &); - ~Logger(); - - void write(const QString &message); - - LoggerImpl *d; -}; - -} // end namespace - -#define QLOG_TRACE() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::TraceLevel) \ - QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() -#define QLOG_DEBUG() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::DebugLevel) \ - QsLogging::Logger::Helper(QsLogging::DebugLevel).stream() -#define QLOG_INFO() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::InfoLevel) \ - QsLogging::Logger::Helper(QsLogging::InfoLevel).stream() -#define QLOG_WARN() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::WarnLevel) \ - QsLogging::Logger::Helper(QsLogging::WarnLevel).stream() -#define QLOG_ERROR() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::ErrorLevel) \ - QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() -#define QLOG_FATAL() QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() - -/* -#define QLOG_TRACE() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::TraceLevel) \ - QsLogging::Logger::Helper(QsLogging::TraceLevel).stream() << __FILE__ << '@' << __LINE__ -#define QLOG_DEBUG() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::DebugLevel) \ - QsLogging::Logger::Helper(QsLogging::DebugLevel).stream() << __FILE__ << '@' << __LINE__ -#define QLOG_INFO() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::InfoLevel) \ - QsLogging::Logger::Helper(QsLogging::InfoLevel).stream() << __FILE__ << '@' << __LINE__ -#define QLOG_WARN() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::WarnLevel) \ - QsLogging::Logger::Helper(QsLogging::WarnLevel).stream() << __FILE__ << '@' << __LINE__ -#define QLOG_ERROR() \ - if (QsLogging::Logger::instance().loggingLevel() <= QsLogging::ErrorLevel) \ - QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() << __FILE__ << '@' << __LINE__ -#define QLOG_FATAL() \ - QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() << __FILE__ << '@' << __LINE__ -*/ diff --git a/logger/QsLogDest.cpp b/logger/QsLogDest.cpp deleted file mode 100644 index 4a47060e..00000000 --- a/logger/QsLogDest.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "QsLogDest.h" -#include "QsDebugOutput.h" -#include "QsLog.h" -#include -#include -#include - -namespace QsLogging -{ - -Destination::~Destination() -{ - Logger::instance().removeDestination(this); - QsDebugOutput::output("Removed logger destination."); -} - -//! file message sink -class FileDestination : public Destination -{ -public: - FileDestination(const QString &filePath); - virtual void write(const QString &message); - -private: - QFile mFile; - QTextStream mOutputStream; -}; - -FileDestination::FileDestination(const QString &filePath) -{ - mFile.setFileName(filePath); - mFile.open(QFile::WriteOnly | QFile::Text | - QFile::Truncate); // fixme: should throw on failure - mOutputStream.setDevice(&mFile); -} - -void FileDestination::write(const QString &message) -{ - mOutputStream << message << endl; - mOutputStream.flush(); -} - -//! debugger sink -class DebugOutputDestination : public Destination -{ -public: - virtual void write(const QString &message); -}; - -void DebugOutputDestination::write(const QString &message) -{ - QsDebugOutput::output(message); -} - -class QDebugDestination : public Destination -{ -public: - virtual void write(const QString &message) - { - qDebug() << message; - }; -}; - -DestinationPtr DestinationFactory::MakeFileDestination(const QString &filePath) -{ - return DestinationPtr(new FileDestination(filePath)); -} - -DestinationPtr DestinationFactory::MakeDebugOutputDestination() -{ - return DestinationPtr(new DebugOutputDestination); -} - -DestinationPtr DestinationFactory::MakeQDebugDestination() -{ - return DestinationPtr(new QDebugDestination); -} - -} // end namespace diff --git a/logger/QsLogDest.h b/logger/QsLogDest.h deleted file mode 100644 index a8000022..00000000 --- a/logger/QsLogDest.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2010, Razvan Petru -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: - -// * Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// * The name of the contributors may not be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. - -#pragma once - -#include - -class QString; - -namespace QsLogging -{ - -class Destination -{ -public: - virtual ~Destination(); - virtual void write(const QString &message) = 0; -}; -typedef std::shared_ptr DestinationPtr; - -//! Creates logging destinations/sinks. The caller will have ownership of -//! the newly created destinations. -class DestinationFactory -{ -public: - static DestinationPtr MakeFileDestination(const QString &filePath); - static DestinationPtr MakeDebugOutputDestination(); - static DestinationPtr MakeQDebugDestination(); -}; - -} // end namespace -- cgit v1.2.3