gpt4 book ai didi

c++ - 将断言消息写入日志文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:34 26 4
gpt4 key购买 nike

我编写了一个 C++ 应用程序,可以在运行板载 Linux 操作系统的嵌入式设备上运行。出于调试目的,我在我的应用程序中插入了 std::cout 语句。

我使用以下命令运行应用程序以将我所有的日志消息存储到一个文件中

./TestApplication > /var/log/test_log

正如预期的那样,所有日志消息都存储在 test_log 中。但是当应用程序面临断言时,断言消息不会存储在日志文件中。

我的应用程序依赖于很多第三方包,每个包都有自己的自定义断言函数。因此,为整个应用程序编写我自己的自定义断言函数将非常困难,因为我还需要迎合第三方自定义断言。

有没有一种简单的方法可以将我所有的日志和断言消息转储到日志文件中?

最佳答案

在 POSIX 系统(如 Linux 或 macOS)上有两个输出流:

  1. 标准输出(由 C++ 中的 std::cout 使用)
  2. 标准错误(由 C++ 中的 std::cerrstd::clog 使用)

使用普通的 > shell 重定向运算符,您只能重定向标准输出,而不是标准错误(例如写入断言消息的地方)。

您需要使用 2>&1 告诉 shell 标准错误应该与标准输出相同:

./TestApplication > /var/log/test_log 2>&1

请注意重定向的顺序很重要。

阅读更多关于 redirection 的信息在Bash manual page .


如果您想知道 2>&1 中的数字,那是标准的文件描述符数字。描述符 0 是标准输入(您使用 std::cin 读取);描述符1是标准输出;描述符 2 是标准错误。

关于c++ - 将断言消息写入日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com