当程序登录到控制台时会发生什么?

What happens when a program logs to the console?

我有一个 java 服务器应用程序 运行,它使用 Logback 作为其主要日志记录库。最近我要求开发人员删除他们为非开发环境添加的额外控制台日志记录,当他们问我为什么意识到我没有充分的理由时。

我认为额外的日志记录会导致更多 I/O 操作,但它是否也会增加更多的内存使用量?它在 stdout 中写入的缓冲区有多大,何时清除?

我们的标准日志记录是一个文件,我们可以查看该文件,也可以将其通过管道传输到监控工具中。该应用程序是通过自动化流程部署的,并且是无头的,因此通常没有人在 VM 上查看内容。

日志附加程序示例 (Dropwizard configurations)

logging:
  level: INFO
  appenders:
    - type: file
      currentLogFilename: /var/log/myapplication.log
      archive: true
      archivedFileCount: 5
    - type: console
      target: stdout

从本质上讲,在不使用控制台时记录到控制台是否有损害?采取什么形式?

除非您记录数百万条记录,否则日志记录对性能没有明显影响。

记录到控制台比记录到文件更短暂 -- 日志消息不会保存在任何地方。这使得无法追踪错误和解决问题,尤其是在生产中。

如果您 运行 您的应用程序位于 Docker 之类的容器中,则记录到 STDOUT 会很有用。 Docker 可以使用 docker logs 在它 运行 的任何容器中获取写入 STDOUT 和 STDERR 的任何内容,或者可以重定向到不同的服务器。如果应用程序将写入它 运行 的容器本地日志文件,那么从容器外部访问该文件会困难得多。