Prepare category logging for Qt integration
authorWolfgang Beck <wolfgang.beck@nokia.com>
Mon, 16 Jan 2012 07:45:23 +0000 (17:45 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 3 Apr 2012 08:45:02 +0000 (10:45 +0200)
Change-Id: I0c784a945fe87d7ba52a44f5c7246de1709ae888
Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
Reviewed-by: Peter Yard <peter.yard@nokia.com>
Reviewed-by: Alex <alex.blasche@nokia.com>
src/corelib/global/qlogging.cpp
src/corelib/global/qlogging.h

index fe19ae6..afefb11 100644 (file)
@@ -147,9 +147,7 @@ QDebug QMessageLogger::debug()
 {
     QDebug dbg = QDebug(QtDebugMsg);
     QMessageLogContext &ctxt = dbg.stream->context;
-    ctxt.file = context.file;
-    ctxt.line = context.line;
-    ctxt.function = context.function;
+    ctxt.copy(context);
     return dbg;
 }
 
@@ -174,9 +172,7 @@ QDebug QMessageLogger::warning()
 {
     QDebug dbg = QDebug(QtWarningMsg);
     QMessageLogContext &ctxt = dbg.stream->context;
-    ctxt.file = context.file;
-    ctxt.line = context.line;
-    ctxt.function = context.function;
+    ctxt.copy(context);
     return dbg;
 }
 #endif
@@ -196,9 +192,7 @@ QDebug QMessageLogger::critical()
 {
     QDebug dbg = QDebug(QtCriticalMsg);
     QMessageLogContext &ctxt = dbg.stream->context;
-    ctxt.file = context.file;
-    ctxt.line = context.line;
-    ctxt.function = context.function;
+    ctxt.copy(context);
     return dbg;
 }
 #endif
@@ -369,6 +363,7 @@ Q_AUTOTEST_EXPORT QByteArray qCleanupFuncinfo(QByteArray info)
 }
 
 // tokens as recognized in QT_MESSAGE_PATTERN
+static const char categoryTokenC[] = "%{category}";
 static const char typeTokenC[] = "%{type}";
 static const char messageTokenC[] = "%{message}";
 static const char fileTokenC[] = "%{file}";
@@ -438,7 +433,9 @@ QMessagePattern::QMessagePattern()
             // placeholder
             if (lexeme == QLatin1String(typeTokenC)) {
                 tokens[i] = typeTokenC;
-            } else if (lexeme == QLatin1String(messageTokenC))
+            } else if (lexeme == QLatin1String(categoryTokenC))
+                tokens[i] = categoryTokenC;
+            else if (lexeme == QLatin1String(messageTokenC))
                 tokens[i] = messageTokenC;
             else if (lexeme == QLatin1String(fileTokenC))
                 tokens[i] = fileTokenC;
@@ -505,6 +502,8 @@ Q_CORE_EXPORT QByteArray qMessageFormatString(QtMsgType type, const QMessageLogC
         const char *token = pattern->tokens[i];
         if (token == messageTokenC) {
             message.append(str);
+        } else if (token == categoryTokenC) {
+            message.append(context.category);
         } else if (token == typeTokenC) {
             switch (type) {
             case QtDebugMsg:   message.append("debug"); break;
@@ -681,4 +680,11 @@ QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
     return old;
 }
 
+void QMessageLogContext::copy(const QMessageLogContext &logContext)
+{
+    this->category = logContext.category;
+    this->file = logContext.file;
+    this->line = logContext.line;
+    this->function = logContext.function;
+}
 QT_END_NAMESPACE
index 4de04bd..29313bd 100644 (file)
@@ -66,15 +66,17 @@ class QMessageLogContext
 {
     Q_DISABLE_COPY(QMessageLogContext)
 public:
-    QMessageLogContext() : version(1), line(0), file(0), function(0) {}
-    Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber,
-                                        const char *functionName)
-        : version(1), line(lineNumber), file(fileName), function(functionName) {}
+    QMessageLogContext() : version(1), line(0), file(0), function(0), category(0) {}
+    Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName)
+        : version(1), line(lineNumber), file(fileName), function(functionName), category(categoryName) {}
+
+    void copy(const QMessageLogContext &logContext);
 
     int version;
     int line;
     const char *file;
     const char *function;
+    const char *category;
 
 private:
     friend class QMessageLogger;
@@ -87,7 +89,9 @@ class Q_CORE_EXPORT QMessageLogger
 public:
     QMessageLogger() : context() {}
     Q_DECL_CONSTEXPR QMessageLogger(const char *file, int line, const char *function)
-        : context(file, line, function) {}
+        : context(file, line, function, "default") {}
+    Q_DECL_CONSTEXPR QMessageLogger(const char *file, int line, const char *function, const char *category)
+        : context(file, line, function, category) {}
 
     void debug(const char *msg, ...)
 #if defined(Q_CC_GNU) && !defined(__INSURE__)