我使用qSetMessagePattern
来格式化输出。
奇怪的是,即使我设置了%{file}
和%{line}
,我的输出中也只能得到unknown
和0
。%{function}
也是如此。来源和输出如下:
qSetMessagePattern("%{file}(%{line}): %{message}");
qDebug() << "msg";
输出:
unknown(0): msg
有什么想法吗?谢谢
addDEFINES += QT_MESSAGELOGCONTEXT
到您的xxx.pro,然后,重建
make clean && make distclean && qmake && make
我希望这能对你有所帮助。
尝试为您构建的目标添加:
target_compile_definitions(${PROJECT_NAME} PRIVATE -DQT_DEBUG -DQT_MESSAGELOGCONTEXT)
与-DQT_NO_DEBUG
一起使用时,似乎-DQT_DEBUG
具有优先级。
我使用了这个提示https://stackoverflow.com/a/24012195/2656799以绕过问题。在qlogging.h(请参阅)中,您可以看到调试宏是如何定义的:
#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