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

Mil*_*red 1 qt qdebug qt5

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

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

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

pep*_*ppe 12

请不要错误地假设qDebug,qWarning,qCritical和qFatal始终登录标准错误.绝对不是这样的.

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

TL; DR:

在Qt> = 5.4:

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

在Qt <5.4时,情况更加混乱.

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

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


dom*_*om0 5

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

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