diff options
Diffstat (limited to 'rbutil/rbutilqt/logger/Logger.h')
-rw-r--r-- | rbutil/rbutilqt/logger/Logger.h | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/rbutil/rbutilqt/logger/Logger.h b/rbutil/rbutilqt/logger/Logger.h deleted file mode 100644 index d056dfc25d..0000000000 --- a/rbutil/rbutilqt/logger/Logger.h +++ /dev/null @@ -1,319 +0,0 @@ -/* - Copyright (c) 2010 Boris Moiseev (cyberbobs at gmail dot com) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 2.1 - as published by the Free Software Foundation and appearing in the file - LICENSE.LGPL included in the packaging of this file. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. -*/ -#ifndef LOGGER_H -#define LOGGER_H -/** - * \file Logger.h - * \brief A file containing the description of Logger class and and additional useful macros for logging - */ - -// Qt -#include <QString> -#include <QDebug> -class QDateTime; - -// Local -#include "CuteLogger_global.h" -class AbstractAppender; - - -//! Writes the trace log record -/** - * This macro is the convinient way to call Logger::write(). It uses the common preprocessor macros \c __FILE__, - * \c __LINE__ and the standart Qt \c Q_FUNC_INFO macros to automatically determine the needed parameters to call - * Logger::write(). - * - * \note This and other (LOG_INFO() etc...) macros uses the variadic macro arguments to give convinient usage form for - * the different versions of Logger::write() (using the QString or const char* argument or returning the QDebug class - * instance). Not all compilers will support this. Please, consider reviewing your compiler documentation to ensure - * it support __VA_ARGS__ macro. - * - * It is checked to work with GCC 4.4 or later. - * - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_TRACE(...) Logger::write(Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Writes the debug log record -/** - * This macro records the info log record using the Logger::write() function. It works identically to the LOG_TRACE() - * macro. - * - * \sa LOG_TRACE() - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_DEBUG(...) Logger::write(Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Write the info log record -/** - * This macro records the info log record using the Logger::write() function. It works identically to the LOG_TRACE() - * macro. - * - * \sa LOG_TRACE() - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_INFO(...) Logger::write(Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Write the warning log record -/** - * This macro records the warning log record using the Logger::write() function. It works identically to the LOG_TRACE() - * macro. - * - * \sa LOG_TRACE() - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_WARNING(...) Logger::write(Logger::Warning, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Write the error log record -/** - * This macro records the error log record using the Logger::write() function. It works identically to the LOG_TRACE() - * macro. - * - * \sa LOG_TRACE() - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_ERROR(...) Logger::write(Logger::Error, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Write the fatal log record -/** - * This macro records the fatal log record using the Logger::write() function. It works identically to the LOG_TRACE() - * macro. - * - * \note Recording of the log record using the Logger::Fatal log level will lead to calling the STL abort() - * function, which will interrupt the running of your software and begin the writing of the core dump. - * - * \sa LOG_TRACE() - * \sa Logger::LogLevel - * \sa Logger::write() - */ -#define LOG_FATAL(...) Logger::write(Logger::Fatal, __FILE__, __LINE__, Q_FUNC_INFO, ##__VA_ARGS__) - -//! Check the assertion -/** - * This macro is a convinient and recommended to use way to call Logger::writeAssert() function. It uses the - * preprocessor macros (as the LOG_DEBUG() does) to fill the necessary arguments of the Logger::writeAssert() call. It - * also uses undocumented but rather mature and stable \c qt_noop() function (which does nothing) when the assertion - * is true. - * - * Example: - * \code - * bool b = checkSomething(); - * ... - * LOG_ASSERT(b == true); - * \endcode - * - * \sa Logger::writeAssert() - */ -#define LOG_ASSERT(cond) ((!(cond)) ? Logger::writeAssert(__FILE__, __LINE__, Q_FUNC_INFO, #cond) : qt_noop()) - - -/** - * \mainpage - * - * Logger is a simple way to write the history of your application lifecycle to any target logging device (which is - * called Appender and may write to any target you will implement with it: console, text file, XML or something - you - * choose) and to map logging message to a class, function, source file and line of code which it is called from. - * - * Some simple appenders (which may be considered an examples) are provided with the logger itself: see ConsoleAppender - * and FileAppender documentation. - * - * It supports using it in a multithreaded applications, so ALL of its functions are thread safe. - * - * Simple usage example: - * \code - * #include <QCoreApplication> - * - * #include <Logger.h> - * #include <ConsoleAppender.h> - * - * int main(int argc, char* argv[]) - * { - * QCoreApplication app(argc, argv); - * ... - * ConsoleAppender* consoleAppender = new ConsoleAppender(); - * consoleAppender->setFormat("[%-7l] <%C> %m\n"); - * Logger::registerAppender(consoleAppender); - * ... - * LOG_INFO("Starting the application"); - * int result = app.exec(); - * ... - * if (result) - * LOG_WARNING() << "Something went wrong." << "Result code is" << result; - * - * return result; - * } - * \endcode - * - * Logger internally uses the lazy-initialized singleton object and needs no definite initialization, but you may - * consider registering a log appender before calling any log recording functions or macros. - * - * The library design of Logger allows you to simply mass-replace all occurrences of qDebug and similiar calls with - * similiar Logger macros (e.g. LOG_DEBUG) - * - * \note Logger uses a singleton class which must live through all the application life cycle and cleans it on the - * destruction of the QCoreApplication (or QApplication) instance. It needs a QCoreApplication instance to be - * created before any of the Logger's functions are called. - * - * \sa AbstractAppender - * \sa LOG_TRACE, LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_FATAL - * \sa LOG_ASSERT - */ - -//! Very simple but rather powerful component which may be used for logging your application activities. -class CUTELOGGERSHARED_EXPORT Logger -{ - public: - //! Describes the possible severity levels of the log records - enum LogLevel - { - Trace, //!< Trace level. Can be used for mostly unneeded records used for internal code tracing. - Debug, //!< Debug level. Useful for non-necessary records used for the debugging of the software. - Info, //!< Info level. Can be used for informational records, which may be interesting for not only developers. - Warning, //!< Warning. May be used to log some non-fatal warnings detected by your application. - Error, //!< Error. May be used for a big problems making your application work wrong but not crashing. - Fatal //!< Fatal. Used for unrecoverable errors, crashes the application right after the log record is written. - }; - - //! Converts the LogLevel enum value to its string representation - /** - * \param logLevel Log level to convert - * - * \sa LogLevel - * \sa levelFromString() - */ - static QString levelToString(LogLevel logLevel); - - //! Converts the LogLevel string representation to enum value - /** - * Comparation of the strings is case independent. If the log level string provided cannot be understood - * Logger::Debug is returned. - * - * \param s String to be decoded - * - * \sa LogLevel - * \sa levelToString() - */ - static LogLevel levelFromString(const QString& s); - - //! Registers the appender to write the log records to - /** - * On the log writing call (using one of the macros or the write() function) Logger traverses through the list of - * the appenders and writes a log records to the each of them. Please, look through the AbstractAppender - * documentation to understand the concept of appenders. - * - * If no appenders was added to Logger, it falls back to logging into the \c std::cerr STL stream. - * - * \param appender Appender to register in the Logger - * - * \note Logger takes ownership on the appender and it will delete it on the application exit. According to this, - * appenders must be created on heap to prevent double destruction of the appender. - * - * \sa AbstractAppender - */ - static void registerAppender(AbstractAppender* appender); - - //! Writes the log record - /** - * Writes the log records with the supplied arguments to all the registered appenders. - * - * \note It is not recommended to call this function directly. Instead of this you can just call one of the macros - * (LOG_TRACE, LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_FATAL) that will supply all the needed - * information to this function. - * - * \param timeStamp - the time stamp of the record - * \param logLevel - the log level of the record - * \param file - the name of the source file that requested the log record - * \param line - the line of the code of source file that requested the log record - * \param function - name of the function that requested the log record - * \param message - log message - * - * \note Recording of the log record using the Logger::Fatal log level will lead to calling the STL abort() - * function, which will interrupt the running of your software and begin the writing of the core dump. - * - * \sa LogLevel - * \sa LOG_TRACE, LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_FATAL - * \sa AbstractAppender - */ - static void write(const QDateTime& timeStamp, LogLevel logLevel, const char* file, int line, const char* function, - const QString& message); - - /** - * This is the overloaded function provided for the convinience. It behaves identically to the above function. - * - * This function uses the current timestamp obtained with \c QDateTime::currentDateTime(). - * - * \sa write() - */ - static void write(LogLevel logLevel, const char* file, int line, const char* function, const QString& message); - - /** - * This is the overloaded function provided for the convinience. It behaves identically to the above function. - * - * This function uses the current timestamp obtained with \c QDateTime::currentDateTime(). Also it supports writing - * <tt>const char*</tt> instead of \c QString and converts it internally using the \c QString::fromAscii(). If you - * want this function to support the non-ascii strings, you will need to setup the codec using the - * \c QTextCodec::setCodecForCStrings() - * - * \sa write() - */ - static void write(LogLevel logLevel, const char* file, int line, const char* function, const char* message, ...); - - /** - * This is the overloaded function provided for the convinience. It behaves identically to the above function. - * - * This function doesn't accept any log message as argument. It returns the \c QDebug object that can be written - * using the stream functions. For example, you may like to write: - * \code - * LOG_DEBUG() << "This is the size" << size << "of the element" << elementName; - * \endcode - * instead of writing - * \code - * LOG_DEBUG(QString(QLatin1String("This is the size %1x%2 of the element %3")) - * .arg(size.x()).arg(size.y()).arg(elementName)); - * \endcode - * - * Please consider reading the Qt Reference Documentation for the description of the QDebug class usage syntax. - * - * \note This overload is definitely more pleasant to use than the first write() overload, but it behaves definitely - * slower than all the above overloads. - * - * \sa write() - */ - static QDebug write(LogLevel logLevel, const char* file, int line, const char* function); - - //! Writes the assertion - /** - * This function writes the assertion record using the write() function. - * - * The assertion record is always written using the Logger::Fatal log level which leads to the abortation of the - * program and generation of the core dump (if supported). - * - * The message written to the appenders will be identical to the \c condition argument prefixed with the - * <tt>ASSERT:</tt> notification. - * - * \note It is not recommended to call this function directly. Instead of this you can just call the LOG_ASSERT - * macro that will supply all the needed information to this function. - * - * \sa LOG_ASSERT - * \sa write() - */ - static void writeAssert(const char* file, int line, const char* function, const char* condition); -}; - -#endif // LOGGER_H |