将 Apache2 日志写入 stdout/stderr?

aro*_*ick 39 apache-2.2 docker

我在 docker 容器中运行 Apache2,并且不想向磁盘写入任何内容,将日志写入 stdout 和 stderr。我已经看到了几种不同的方法来做到这一点(Supervisord 和 stdout/stderrApache 访问日志到 stdout),但这些看起来像是黑客。默认情况下没有办法做到这一点吗?

需要明确的是,我不想拖尾日志,因为这会导致将内容写入容器中的磁盘。

小智 44

  ErrorLog /dev/stderr
  TransferLog /dev/stdout
Run Code Online (Sandbox Code Playgroud)

适用于我的 ubuntu 和 centos

  • 对于_Alpine Linux_,您可以在`/etc/apache2/httpd.conf`中将其设置为`ErrorLog /dev/stderr`和`CustomLog /dev/stdout组合` (2认同)

hoo*_*enz 33

安装 apache2 包后,如何将它放在您的 Dockerfile 中?

RUN ln -sf /proc/self/fd/1 /var/log/apache2/access.log && \
    ln -sf /proc/self/fd/1 /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)

假设这是日志的路径。它适用于 Ubuntu 14.04,也适用于 Ubuntu 16.04。

注意:如果您确定符号链接/dev/stdout/proc/stderr在那里,那么您也可以使用它们。我更喜欢真实文件的路径,因为这是保证存在的。

  • 您可以将 /proc/self/fd/1 缩写为 /dev/stdout。它们是完全一样的东西。 (3认同)
  • 该死,这真是一个巧妙的黑客!Apache 尝试打开一个常规文件,但从它自己的角度通过符号链接重定向到它自己的标准输出。 (2认同)