linux - 嵌入式 Linux -> 将应用程序日志保存到文件

标签 linux shell logging embedded file-descriptor

您可能会认为该问题是重复的,但请阅读到最后。

我有一个在嵌入式 Linux 上运行的应用程序,我想从该应用程序中捕获所有日志。我尝试将 with 文件描述符作为 1 用于 stdout,2 用于 stderr。我能够捕获 stderr 日志。我想用 printf 语句捕获日志。该应用程序已经构建,因此我无法更改它。它是嵌入式 Linux,因此没有脚本 实用程序。 我的应用程序有 printf 日志。我只想使用 shell 命令捕获它们(如果有的话)。 我尝试了以下命令

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

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

请帮忙。

最佳答案

你的前两个命令行实际上应该捕获发送到 stdin 的所有内容(通过 printfputs 等) stderr(最后一个命令行遗漏了后者)。

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

如果不知道输出实际发送到哪里,就不可能捕捉到它。 strace应用程序可用于找出这些字符串被发送到的位置。

关于linux - 嵌入式 Linux -> 将应用程序日志保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038796/

相关文章:

c++ - 如何在C++/VC++中将日志写入大小为64KB的文件?

windows - 适用于 Windows 程序员的最佳 "official"脚本语言

bash - 如何在 bash 数组中存储多行输出?

python - 使用 python-gstreamer 指定声卡

linux - 如何在Linux中的Thorn字符 'þ'上分割一行?

macos - 执行后退出终端

linux - Catalina.out 未通过 bash 脚本在编辑后登录

c++ - 为什么使用 Logger 而不是 cout?

java - 我可以获得 Java Runtime.getRuntime().exec 的真正完整执行命令吗?

java - 从脚本设置 Java 版本