【问题标题】:Where is located the qDebug qWarning qCritical and qFatal log by default on Qt?Qt 上默认的 qDebug qWarning qCritical 和 qFatal 日志在哪里?
【发布时间】:2014-12-05 09:09:25
【问题描述】:

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

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

我想我记得过去,一切都打印到 stderr,也许这是 Qt5 的变化?

【问题讨论】:

    标签: qt qt5 qdebug


    【解决方案1】:

    请不要误以为 qDebug、qWarning、qCritical 和 qFatal 总是登录标准错误。绝对不是这样。

    实际目的地因 Qt 配置和目标操作系统而异。另外,5.4 和 5.11 引入了一些行为变化。请参阅herehere 进行讨论。

    TL;DR:

    在 Qt >= 5.11

    • 如果进程的 stderr 附加了一个控制台,那么调试日志将转到该控制台。
    • 如果您想始终登录 stderr,请将 QT_FORCE_STDERR_LOGGING 设置为 1
    • 或者,将QT_ASSUME_STDERR_HAS_CONSOLE 设置为1。我怀疑这个是供父进程使用的,它读取孩子的 stderr 并以某种方式将其显示给用户。
    • QT_LOGGING_TO_CONSOLE1 仍然有效,但 Qt 会抱怨。

    在 Qt >= 5.4 和

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

    在 Qt 上,情况更加混乱。

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

    5.4 之前的方法的问题在于,如果 Qt 是使用 journald 支持构建的,那么在 Unix IDE 下不会捕获应用程序的调试输出。那是因为输出去了 journald,而不是 IDE。在 5.4 中,该方法在操作系统之间变得更加灵活和统一。

    【讨论】:

    • 正如你所说,除了 QT_LOGGING_TO_CONSOLE 似乎可以与 Qt 5.3.2 一起使用(由 ArchLinux 打包)
    • 也许 Arch 向后移植了补丁?请参阅此错误报告中的讨论bugs.archlinux.org/task/40583
    • 我是在 Arch linux 论坛的其他地方找到答案后才发现的,但答案是完美的。我的问题更多的是“为什么 qDebug() 在升级 Qt(过去 5.3)后停止进入控制台?”应该从一堆其他 stackoverflow 问题中引用该线程。
    【解决方案2】:

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

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

    【讨论】:

    • QT_LOGGING_TO_CONSOLE 目前已被弃用,因为@peppe 在他的回答中已经说过(QtCreator >5.15)。使用 QT_ASSUME_STDERR_HAS_CONSOLE=1 环境变量并从终端启动 QtCreator,使输出打印在 Arch 上。有关该问题的更多信息,请参见:bbs.archlinux.org/viewtopic.php?id=259035
    【解决方案3】:

    它们仍然打印为标准错误。

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

    【讨论】:

      【解决方案4】:

      如果您使用的是 Visual Studio,则 qDebug 等会打印到 IDE 的输出窗口中。

      【讨论】:

        猜你喜欢
        • 2011-06-24
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 2018-08-13
        • 2019-08-15
        • 2015-08-10
        • 2011-02-03
        相关资源
        最近更新 更多