qSetMessagePattern(“%{file}(%{line}):%{message}”)输出“unkown(0)”

时间:2016-05-02 06:10:55

标签: c++ qt logging qt5

我正在使用qSetMessagePattern格式化输出。

奇怪的是,我设置了%{file}%{line},我只能在输出中获得unknown0%{function}也是如此。来源和输出如下:

qSetMessagePattern("%{file}(%{line}): %{message}");
qDebug() << "msg";

输出:

unknown(0): msg

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:0)

添加 DEFINES += QT_MESSAGELOGCONTEXT 到你的xxx.pro, 然后,重建

make clean && make distclean && qmake && make 

我希望这可以帮到你。

答案 1 :(得分:0)

尝试为您构建的目标添加:

target_compile_definitions(${PROJECT_NAME} PRIVATE -DQT_DEBUG -DQT_MESSAGELOGCONTEXT)

似乎-DQT_DEBUG-DQT_NO_DEBUG一起使用时具有优先权。

答案 2 :(得分:0)

我使用此提示https://stackoverflow.com/a/24012195/2656799来绕过问题。在qlogging.h(see there)中,您可以看到调试宏的定义方式:

#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
#define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info
#define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning
#define qCritical QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).critical
#define qFatal QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal

所以我的解决方案是使用标准文件,行上下文宏重新定义它们:

#define logDebug    QMessageLogger(__FILE__,__LINE__, QT_MESSAGELOG_FUNC).debug
#define logInfo     QMessageLogger(__FILE__,__LINE__, QT_MESSAGELOG_FUNC).info
#define logWarning  QMessageLogger(__FILE__,__LINE__, QT_MESSAGELOG_FUNC).warning
#define logCritical QMessageLogger(__FILE__,__LINE__, QT_MESSAGELOG_FUNC).critical
#define logFatal    QMessageLogger(__FILE__,__LINE__, QT_MESSAGELOG_FUNC).fatal