21#include <QElapsedTimer>
24#include "CuteLogger_global.h"
29CUTELOGGERSHARED_EXPORT
Logger* cuteLoggerInstance();
30#define cuteLogger cuteLoggerInstance()
33#define LOG_TRACE CuteMessageLogger(cuteLoggerInstance(), Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO).write
34#define LOG_DEBUG CuteMessageLogger(cuteLoggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO).write
35#define LOG_INFO CuteMessageLogger(cuteLoggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO).write
36#define LOG_WARNING CuteMessageLogger(cuteLoggerInstance(), Logger::Warning, __FILE__, __LINE__, Q_FUNC_INFO).write
37#define LOG_ERROR CuteMessageLogger(cuteLoggerInstance(), Logger::Error, __FILE__, __LINE__, Q_FUNC_INFO).write
38#define LOG_FATAL CuteMessageLogger(cuteLoggerInstance(), Logger::Fatal, __FILE__, __LINE__, Q_FUNC_INFO).write
40#define LOG_CTRACE(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
41#define LOG_CDEBUG(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
42#define LOG_CINFO(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
43#define LOG_CWARNING(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Warning, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
44#define LOG_CERROR(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Error, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
45#define LOG_CFATAL(category) CuteMessageLogger(cuteLoggerInstance(), Logger::Fatal, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
47#define LOG_TRACE_TIME LoggerTimingHelper loggerTimingHelper(cuteLoggerInstance(), Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
48#define LOG_DEBUG_TIME LoggerTimingHelper loggerTimingHelper(cuteLoggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
49#define LOG_INFO_TIME LoggerTimingHelper loggerTimingHelper(cuteLoggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
51#define LOG_ASSERT(cond) ((!(cond)) ? cuteLoggerInstance()->writeAssert(__FILE__, __LINE__, Q_FUNC_INFO, #cond) : qt_noop())
52#define LOG_ASSERT_X(cond, msg) ((!(cond)) ? cuteLoggerInstance()->writeAssert(__FILE__, __LINE__, Q_FUNC_INFO, msg) : qt_noop())
54#if (__cplusplus >= 201103L)
57#define LOG_CATEGORY(category) \
58 Logger customCuteLoggerInstance{category};\
59 std::function<Logger*()> cuteLoggerInstance = [&customCuteLoggerInstance]() {\
60 return &customCuteLoggerInstance;\
63#define LOG_GLOBAL_CATEGORY(category) \
64 Logger customCuteLoggerInstance{category, true};\
65 std::function<Logger*()> cuteLoggerInstance = [&customCuteLoggerInstance]() {\
66 return &customCuteLoggerInstance;\
71#define LOG_CATEGORY(category) \
72 Logger* cuteLoggerInstance()\
74 static Logger customCuteLoggerInstance(category);\
75 return &customCuteLoggerInstance;\
78#define LOG_GLOBAL_CATEGORY(category) \
79 Logger* cuteLoggerInstance()\
81 static Logger customCuteLoggerInstance(category);\
82 customCuteLoggerInstance.logToGlobalInstance(category, true);\
83 return &customCuteLoggerInstance;\
96 Logger(
const QString& defaultCategory,
bool writeToGlobalInstance =
false);
117 static QString levelToString(LogLevel logLevel);
118 static LogLevel levelFromString(
const QString& s);
120 static Logger* globalInstance();
123 void registerCategoryAppender(
const QString& category,
AbstractAppender* appender);
127 void logToGlobalInstance(
const QString& category,
bool logToGlobal =
false);
129 void setDefaultCategory(
const QString& category);
130 QString defaultCategory()
const;
132 void write(
const QDateTime& timeStamp, LogLevel logLevel,
const char* file,
int line,
const char* function,
const char* category,
133 const QString& message);
134 void write(LogLevel logLevel,
const char* file,
int line,
const char* function,
const char* category,
const QString& message);
136 void writeAssert(
const char* file,
int line,
const char* function,
const char* condition);
139 void write(
const QDateTime& timeStamp, LogLevel logLevel,
const char* file,
int line,
const char* function,
const char* category,
140 const QString& message,
bool fromLocalInstance);
142 LoggerPrivate* d_ptr;
146class CUTELOGGERSHARED_EXPORT CuteMessageLogger
148 Q_DISABLE_COPY(CuteMessageLogger)
156 m_function(function),
160 CuteMessageLogger(
Logger* l,
Logger::LogLevel level,
const char* file,
int line,
const char* function,
const char* category)
165 m_function(function),
169 ~CuteMessageLogger();
171 void write(
const char* msg, ...)
172#if defined(Q_CC_GNU) && !defined(__INSURE__)
173# if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
174 __attribute__ ((format (gnu_printf, 2, 3)))
176 __attribute__ ((format (printf, 2, 3)))
181 void write(
const QString& msg);
190 const char* m_function;
191 const char* m_category;
196class CUTELOGGERSHARED_EXPORT LoggerTimingHelper
198 Q_DISABLE_COPY(LoggerTimingHelper)
202 const char* function)
204 m_logLevel(logLevel),
205 m_timingMode(
Logger::TimingAuto),
211 void start(
const char* msg, ...)
212#if defined(Q_CC_GNU) && !defined(__INSURE__)
213 # if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
214 __attribute__ ((format (gnu_printf, 2, 3)))
216 __attribute__ ((format (printf, 2, 3)))
221 void start(
const QString& msg = QString());
224 ~LoggerTimingHelper();
228 QElapsedTimer m_time;
233 const char* m_function;
The AbstractAppender class provides an abstract base class for writing a log entries.
Definition AbstractAppender.h:26
Very simple but rather powerful component which may be used for logging your application activities.
Definition Logger.h:91
TimingMode
Sets the timing display mode for the LOG_TRACE_TIME, LOG_DEBUG_TIME and LOG_INFO_TIME macros.
Definition Logger.h:112
@ TimingAuto
Show time in seconds, if it exceeds 10s (default)
Definition Logger.h:113
LogLevel
Describes the possible severity levels of the log records.
Definition Logger.h:101
@ Debug
Debug level. Useful for non-necessary records used for the debugging of the software.
Definition Logger.h:103
@ Warning
Warning. May be used to log some non-fatal warnings detected by your application.
Definition Logger.h:105
@ Trace
Trace level. Can be used for mostly unneeded records used for internal code tracing.
Definition Logger.h:102
@ Info
Info level. Can be used for informational records, which may be interesting for not only developers.
Definition Logger.h:104
@ Error
Error. May be used for a big problems making your application work wrong but not crashing.
Definition Logger.h:106