【发布时间】:2019-11-15 10:51:06
【问题描述】:
我正在使用ConsoleAppender 登录我的Java 应用程序。
ConsoleAppender 写入System.out,在 Linux 的情况下为 stdout。
谁能帮我了解stdout 日志的去向以及分配给它的内存量。
我需要知道这一点,因为我所有到 stdout 的日志都没有被 filebeat 挑选到弹性搜索索引中。
【问题讨论】:
我正在使用ConsoleAppender 登录我的Java 应用程序。
ConsoleAppender 写入System.out,在 Linux 的情况下为 stdout。
谁能帮我了解stdout 日志的去向以及分配给它的内存量。
我需要知道这一点,因为我所有到 stdout 的日志都没有被 filebeat 挑选到弹性搜索索引中。
【问题讨论】:
谁能帮我理解标准输出日志的去向
通常stdout 只是进入你的shell 的缓冲区,通常不会缓冲/记录到任何文件中。我说通常是因为我确信有一些特殊的系统和 Linux 发行版可以以不同的方式处理事情。
其余的,我假设您使用“通用 Linux 桌面或服务器发行版”。
但是,您可以做的是重定向 stdout 到一个文件。
我假设您启动应用程序的方式类似于:
java -jar myapp.jar
您的应用程序输出到stdout,这使您可以在终端中查看输出。
在 Linux(我会说大多数 Unix 系统)上,您可以简单地将 stdout(以及可选的 stderr)重定向到如下文件:
java -jar myapp.jar > output.txt
然后应该在您的系统上创建一个名为output.txt 的文件。
如果您仍然需要“实时用户反馈”,您可以简单地执行类似的操作
tail -f output.txt
连续打印output.txt到stdout的内容。
分配给它的内存是多少。
您的output.txt 文件会不断增长,直到您的磁盘空间用完为止。您可以使用您的分发日志轮换系统来限制文件的大小。 FreeBSD 使用newlogsys(8)。我确信您选择的 Linux 发行版已经配备了类似的系统。
【讨论】:
stdout 重定向到文件这样简单的事情不仅很容易做到,而且还可以使用底层操作系统和其他相关组件。