diff options
Diffstat (limited to 'src/corelib/global/qlogging.cpp')
-rw-r--r-- | src/corelib/global/qlogging.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index aec7111207..13bbdbead0 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -53,6 +53,9 @@ #ifdef Q_OS_WIN #include <qt_windows.h> #endif +#ifdef QT_USE_SLOG2 +#include <slog2.h> +#endif #include <stdio.h> @@ -660,6 +663,56 @@ void QMessagePattern::setPattern(const QString &pattern) memcpy(literals, literalsVar.constData(), literalsVar.size() * sizeof(const char*)); } +#if defined(QT_USE_SLOG2) +#ifndef QT_LOG_CODE +#define QT_LOG_CODE 9000 +#endif + +extern char *__progname; + +static void slog2_default_handler(QtMsgType msgType, const char *message) +{ + if (slog2_set_default_buffer((slog2_buffer_t)-1) == 0) { + slog2_buffer_set_config_t buffer_config; + slog2_buffer_t buffer_handle; + + buffer_config.buffer_set_name = __progname; + buffer_config.num_buffers = 1; + buffer_config.verbosity_level = SLOG2_INFO; + buffer_config.buffer_config[0].buffer_name = "default"; + buffer_config.buffer_config[0].num_pages = 8; + + if (slog2_register(&buffer_config, &buffer_handle, 0) == -1) { + fprintf(stderr, "Error registering slogger2 buffer!\n"); + fprintf(stderr, "%s", message); + fflush(stderr); + return; + } + + // Set as the default buffer + slog2_set_default_buffer(buffer_handle); + } + int severity; + //Determines the severity level + switch (msgType) { + case QtDebugMsg: + severity = SLOG2_INFO; + break; + case QtWarningMsg: + severity = SLOG2_NOTICE; + break; + case QtCriticalMsg: + severity = SLOG2_WARNING; + break; + case QtFatalMsg: + severity = SLOG2_ERROR; + break; + } + //writes to the slog2 buffer + slog2c(NULL, QT_LOG_CODE, severity, message); +} +#endif // QT_USE_SLOG2 + Q_GLOBAL_STATIC(QMessagePattern, qMessagePattern) /*! @@ -747,8 +800,13 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con return; } #endif // Q_OS_WIN + +#if defined(QT_USE_SLOG2) + slog2_default_handler(type, logMessage.toLocal8Bit().constData()); +#else fprintf(stderr, "%s", logMessage.toLocal8Bit().constData()); fflush(stderr); +#endif } /*! |