我正在尝试将 Lumen php 框架日志存储在/var/log/apache2/
其安装目录/storage/logs/ 文件夹中。
Lumen-side 很好,因为我可以很好地在 /tmp/ 中写入日志文件。
经过半天的研究、试验和绞尽脑汁,我还是无法理解的是:
- 我正在运行 Ubuntu 16.04
- 存储在 /var/log/apache2/ 中的日志文件拥有所有权 root:adm 和 priv -rw-r--r--
- Apache 仅以 www-data 用户和 www-data 组的一部分身份运行
- 我知道 logrotate 有配置行“create 640 root adm”,所以新的日志文件就是这样创建的
- 我认为 selinux 没有运行(未找到 sestatus 命令...)
那么......Apache 如何能够写入其日志文件?
澄清这个谜团可能会解答我的主要问题。我确实希望将 Lumen 框架日志存储在 Lumen 安装目录之外,因为它会被持续集成过程所取代。
我对这个主题和基础知识进行了大量研究,但找不到答案。
答案1
简短回答:因为 Apache 父进程始终由 root 启动和拥有。因此它可以统计信息并写入/var/log/apache2/
。
root 30089 0.0 0.4 518800 29604 ? Ss Jul05 0:09 /usr/sbin/apache2 -k start
www-data 13076 0.0 0.2 521180 18036 ? S 00:05 0:00 \_ /usr/sbin/apache2 -k start
www-data 13077 0.0 0.2 521180 18036 ? S 00:05 0:00 \_ /usr/sbin/apache2 -k start
www-data 13079 0.0 0.2 521180 18036 ? S 00:05 0:00 \_ /usr/sbin/apache2 -k start
www-data 13080 0.0 0.2 521180 18036 ? S 00:05 0:00 \_ /usr/sbin/apache2 -k start
www-data 13081 0.0 0.2 521180 18036 ? S 00:05 0:00 \_ /usr/sbin/apache2 -k start
www-data 13288 0.0 0.2 521180 18036 ? S 00:17 0:00 \_ /usr/sbin/apache2 -k start
避免使用这个/var/log/apache2
功能并将其留给 apache2 进程(仅此而已)可能是一个好主意。就我个人而言,我会创建一个新目录/var/log/lumen/
(顺便说一句:您不必使用该/var/log/
区域进行日志记录),该目录由您想要记录的给定父进程拥有。或者,设置一个logrotate.d/
类似于 apache2 的目录来偶尔清理日志文件夹。您还可以通过 chown 和 logrotate.d 将组设置adm
为上述方式,以允许管理员组用户访问给定的日志。