Java 写stdout很慢,为什么还建议登录stdout?

Java 写stdout很慢,为什么还建议登录stdout?,java,docker,Java,Docker,我听说在容器中运行应用程序很长一段时间(,和)时,建议登录到标准输出而不是文件 但我发现写入标准输出比写入文件(测试代码)慢得多,结果如下: $ docker build -t console-print . $ docker run -d --name console-print console-print 100000 $ docker logs --tail 5 console-print lines: 100,000 stdout: 2,492 ms file: 18 ms 所以我的问

我听说在容器中运行应用程序很长一段时间(,和)时,建议登录到标准输出而不是文件

但我发现写入标准输出比写入文件(测试代码)慢得多,结果如下:

$ docker build -t console-print .
$ docker run -d --name console-print console-print 100000
$ docker logs --tail 5 console-print
lines: 100,000
stdout: 2,492 ms
file: 18 ms

所以我的问题是为什么我们仍然建议将日志记录到stdout

写入标准输出的建议与性能无关。如果让Docker从容器的STDOUT读取日志,那么将日志输出传递给处理日志的工具会容易得多。如果应用程序首先写入容器本地文件,这将非常困难。

可能您的终端应用程序速度较慢。试着用另一个。

你测量的时间正确吗?这是使用“docker logs--tail 5 console print”和您的文件aproach(询问,因为我在git中没有看到支持“docker--logs”的代码)。请看,如果您将日志转储到/dev/null,速度会更快,但这不是一个公平的比较,不是吗?测试代码做3件事:System.out.println 100000行,向文件写入相同数量的行,它们使用的输出时间,然后退出。
docker logs--tail 5 console print
用于打印包含测试输出的最后5行。我想是这样的,所以您的测量不同。尝试在单独的运行中仅测量文件aproach和System.out方法。对于这两种模式,使用--docker日志将所有内容转储到shell(对于文件方法,您需要额外的代码)。而且FWIW大多数人不希望在非持久性容器中有持久性数据…不,我使用了
-d
参数。