Fix the %{time} printing to *not* default to the process's time

The default should be the actual time of day. Showing the process's time
is the optional case. In the future, we'll provide a way to showing the
monotonic reference time ("boot") and we should improve the detection of
actual application runtime.

Change-Id: I41936d77ab9fad2073dc0ce1c97cabe57ec39f16
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
This commit is contained in:
Thiago Macieira 2014-11-19 14:14:36 -08:00 committed by Jani Heikkinen
parent 0792943d59
commit bb07737614
3 changed files with 17 additions and 8 deletions

5
dist/changes-5.4.0 vendored
View File

@ -97,6 +97,11 @@ QtCore
- Logging:
* QT_MESSAGE_PATTERN can include a backtrace using %{backtrace}
* QT_MESSAGE_PATTERN can include a timestamp using %{time}. By
default, this shows the time in ISO format (YYYY-MM-DDTHH:mm:ss),
but a different format string can be specified in the tag (e.g.,
%{time YYYYMMDDHHmmsszzz}). If the format is "process", Qt will
display the elapsed time since the process started.
* Added QtMsgType argument to QLoggingCategory constructor and
Q_LOGGING_CATEGORY macro that controls the default category
configuration.

View File

@ -1201,11 +1201,14 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
}
#endif
} else if (token == timeTokenC) {
quint64 ms = pattern->timer.elapsed();
if (pattern->timeFormat.isEmpty())
if (pattern->timeFormat == QLatin1String("process")) {
quint64 ms = pattern->timer.elapsed();
message.append(QString().sprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
else
message.append(pattern->startTime.addMSecs(ms).toString(pattern->timeFormat));
} else if (pattern->timeFormat.isEmpty()) {
message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
} else {
message.append(QDateTime::currentDateTime().toString(pattern->timeFormat));
}
#endif
} else if (token == ifCategoryTokenC) {
if (!context.category || (strcmp(context.category, "default") == 0))
@ -1550,9 +1553,10 @@ void qErrnoWarning(int code, const char *msg, ...)
\row \li \c %{pid} \li QCoreApplication::applicationPid()
\row \li \c %{threadid} \li ID of current thread
\row \li \c %{type} \li "debug", "warning", "critical" or "fatal"
\row \li \c %{time} \li time of the message, in seconds since the process started
\row \li \c %{time format} \li system time when the message occurred, formatted by
passing the \c format to \l QDateTime::toString()
\row \li \c %{time process} \li time of the message, in seconds since the process started (the token "process" is literal)
\row \li \c %{time [format]} \li system time when the message occurred, formatted by
passing the \c format to \l QDateTime::toString(). If the format is
not specified, the format of Qt::ISODate is used.
\row \li \c{%{backtrace [depth=N] [separator="..."]}} \li A backtrace with the number of frames
specified by the optional \c depth parameter (defaults to 5), and separated by the optional
\c separator parameter (defaults to "|").

View File

@ -765,7 +765,7 @@ void tst_qmessagehandler::qMessagePattern_data()
// %{time} should have a padding of 6 so if it takes less than 10 seconds to show
// the first message, there should be 5 spaces
QTest::newRow("time") << "<%{time}>%{message}" << true << (QList<QByteArray>()
QTest::newRow("time-process") << "<%{time process}>%{message}" << true << (QList<QByteArray>()
<< "< ");
#ifdef __GLIBC__