QMessageLogContext 的字段(如:文件、函数、行)为空或为零

Posted

技术标签:

【中文标题】QMessageLogContext 的字段(如:文件、函数、行)为空或为零【英文标题】:QMessageLogContext's fields (like: file, function, line) empty or zero 【发布时间】:2015-04-15 09:47:23 【问题描述】:

我有 2 台机器 Debian 7.8 64/32 位。我创建了一个简单的程序。在 main.cpp 中:

void action(QtMsgType type, const QMessageLogContext &context, const QString &msg)

    static QFile logFile("logfile.log");
    static QTextStream ts(&logFile);
    if(logFile.open(QFile::ReadWrite | QFile::Append))
    
      ts << context.file << ":" << context.line << ":"
         << context.function << ": " << msg << endl;
      logFile.close();
    


int main(int argc, char* argv[])

    QCoreApplication app(argc, argv);
    qInstallMessageHandler(action);
    qDebug() << "this is some log";
    return app.exec();

在“logfile.log”中我必须看到:

main.cpp:30:int main(int, char**): this is some log 

但在 Debian 7.8 64 位 Qt 5.4.1 GCC 4.6.1 64 位上我只看到:

:0:: this is some log 

我还在 Debian 7.8 32 位 Qt 5.3.1 GCC 4.6.1 32 位上进行了测试。它运行良好。 它是 Qt 5.4.1(64 位)的错误吗?还是我错过了什么? 你能帮帮我吗?

【问题讨论】:

【参考方案1】:

很可能,您正在使用发布版本。默认情况下,Qt 不会在发布模式下填充这些字段。您可以通过定义QT_MESSAGELOGCONTEXT 来覆盖它并启用上下文日志记录,如this answer 中所述。

【讨论】:

以上是关于QMessageLogContext 的字段(如:文件、函数、行)为空或为零的主要内容,如果未能解决你的问题,请参考以下文章

如何用Sql语句添加字段?

100个字段的hive大宽表kylin如何处理?

如何处理 UiTableviewCell 文本字段?

如何用Sql语句添加字段?

如何用Sql语句添加字段?

如果子消息没有字段,如何在 protobuf 消息上分配 oneof 字段?