【问题标题】:Embedded Linux -> saving application logs to File嵌入式 Linux -> 将应用程序日志保存到文件
【发布时间】:2017-12-30 23:36:26
【问题描述】:

您可能会看到问题重复,但请阅读到最后。

我有一个在嵌入式 Linux 上运行的应用程序,我想从该应用程序中捕获所有日志。我尝试使用文件描述符作为标准输出的 1 和标准错误的 2。我能够捕获标准错误日志。我想用 printf 语句捕获日志。该应用程序已经构建,因此我无法更改它。它是嵌入式 Linux,因此没有 script 实用程序。 我的应用程序有 printf 日志。我想要的只是使用 shell 命令捕获它们(如果有的话)。 我试过下面的命令

./application 2>&1 | tee file.txt
./application >cmd.log 2>&1
./application | tee log.txt

通过这些命令,我​​能够捕获错误消息,但不能捕获 printf 消息

请帮忙。

【问题讨论】:

    标签: linux shell logging embedded file-descriptor


    【解决方案1】:

    您的前两个命令行实际上应该捕获发送(通过printfputs 等)到stdinstderr 的所有内容(最后一个命令行忽略了后者)。

    如果仍有消息打印到控制台或 tty,应用程序要么重定向(例如使用 dup2stderr 和/或 stdout 到其他设备,要么不将其输出发送到这两个文件根本就没有(例如,glibc 在某些错误情况下会直接写入控制台设备)。

    如果不知道该输出实际发送到哪里,就不可能捕获它。 straceing 应用程序可以用来找出这些字符串被发送到哪里。

    【讨论】:

    • 如果 shell 是支持该机制的 bash 之类的东西,他们应该这样做,但在嵌入式设备上,shell 可能更原始。应用程序也有可能直接写入 /dev/console 或类似的东西。
    • 嗨 tofro,克里斯,感谢您的建议。我现在使用以下函数将标准输出重定向到测试文件 freopen("output.txt", "a+", stdout);但我想在控制台上显示标准输出,同时将其捕获/重定向到文件。
    猜你喜欢
    • 2022-01-22
    • 2017-09-25
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多