我正在尝试使用 tee 登录两个位置:
来自 VirtualHost 配置的错误日志行:
ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log /proc/1/fd/1"
现在的问题是错误在 /proc/1/fd/1 中记录了两次(如 docker 日志所述),但错误只在 /var/log/apache/error.log 中记录一次
我也尝试过从 cli 运行:
echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1
这仅成功地将一次写入文件和标准输出。
是否有某种原因导致 Apache 日志写入两次到 /proc/1/fd/1 而只记录一次到文件并且 /usr/bin/tee 也按预期工作?
tee
本身写入标准输出。
ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log /proc/1/fd/1"
因此此日志记录将写入
/var/log/apache/error.log
/proc/1/fd/1
.如果你在 docker 的前台运行 apache,它也会将 (1) 写入 docker 容器的 stdout。从而使其出现两次。
解决方案是不要写入 /proc/1/fd/1,因为 tee 已经写入了
ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log"
您进行的测试
echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1
也写3次,但写到3个不同的位置
/proc/1/fd/1
)以下还将“123”写入 docker 输出两次:
$ docker run alpine sh -c 'echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1'
123
123