在Qt上,qDebug qWarning qCritical和qFatal日志默认位于何处?

时间:2014-10-10 08:44:34

标签: qt qt5 qdebug

在linux上运行我的Qt5应用程序时,我看不到qDebug,qWarning,qCritical或qFatal的任何输出。我知道我可以使用qInstallMsgHandler来安装消息处理程序并查看它们,但这是相当重量级的。

我只想检查qWarning日志,看看是否有任何错误连接的信号。有没有办法看这个日志?一个特殊的命令行选项,一个环境变量?

我想我记得在过去,所有内容都打印到了stderr,也许这是Qt5的变化?

4 个答案:

答案 0 :(得分:12)

请不要错误地假设qDebug,qWarning,qCritical和qFatal总是登录标准错误。绝对不是这样。

实际目的地取决于Qt配置和目标操作系统。另外,5.4介绍了一些行为变化。有关讨论,请参阅herehere

TL; DR:

在Qt> = 5.4:

  • 如果您想始终登录stderr,请将QT_LOGGING_TO_CONSOLE环境变量设置为1
  • 如果您不想登录stderr,QT_LOGGING_TO_CONSOLE环境变量为0(这将强制通过本机系统记录器进行登录)。
  • 如果未设置QT_LOGGING_TO_CONSOLE环境变量 ,那么是否登录到控制台取决于应用程序是在TTY(在UNIX上)运行还是在&#39 ;一个控制台窗口(在Windows上)。

在Qt< 5.4 ,情况更加扑朔迷离。

  • 如果Qt构建时支持特定的日志记录框架(例如SLOG2,journald,Android日志等),那么日志记录总是会转到该框架
  • 否则在UNIX上转到stderr
  • 否则在Windows上使用OutputDebugString或stderr,具体取决于该应用程序是否为控制台应用程序。

5.4之前的方法存在的问题是,如果Qt是使用journald支持构建的,在Unix IDE下,f .i.将无法捕获应用程序的调试输出。这是因为输出转到了journald,而不是IDE。在5.4中,这种方法在操作系统中变得更加灵活和统一。

答案 1 :(得分:2)

它们仍然会打印到标准错误。

如果从命令行启动应用程序,通常会在那里打印,或者如果使用Qt Creator,它将显示在“应用程序输出”窗口中。

答案 2 :(得分:2)

如果您碰巧运行使用-journald选项编译Qt的Arch Linux,则所有调试输出都默认定向到systemd日志(显示journalctl)。

您可以通过将QT_LOGGING_TO_CONSOLE=1定义为环境变量来覆盖此行为。

答案 3 :(得分:0)

如果您使用的是visual studio,则会在IDE的输出窗口中打印qDebug等。