![Apache 中每个虚拟主机可以有 2 个错误日志吗?](https://linux22.com/image/617465/Apache%20%E4%B8%AD%E6%AF%8F%E4%B8%AA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E5%8F%AF%E4%BB%A5%E6%9C%89%202%20%E4%B8%AA%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E5%90%97%EF%BC%9F.png)
我有大约 10 个 VirtualHost,我喜欢将 error_logs 分开。最近,我还需要将 error_logs 全部合并起来进行一些 mod_security 扫描。
如果我为测试虚拟域定义 2 个 ErrorLog,我注意到没有记录任何错误。很奇怪。
是否可以让 CustomLog 充当 ErrorLog 的角色?
或者我错误地定义了我的 2 个 ErrorLogs?
<VirtualHost 1.2.3.4:80>
ServerName mydomain.net
ServerAlias www.mydomain.net mydomain.net
DocumentRoot /var/www/html/mydomain
ServerAdmin [email protected]
UseCanonicalName Off
ErrorLog logs/mydomain.net-error_log
ErrorLog logs/unified_modsecurity-error_log
CustomLog logs/mydomain.net-access_log combined
UserDir disabled
UserDir enabled mydomainuser
</VirtualHost>
答案1
不,每个 VirtualHost 不可能有两个 ErrorLog 指令。但是,您可以使用 Apache 的管道功能将命令传送到两个(或更多)文件,方法是使用 UNIX“tee”命令:
错误日志“|/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log”
答案2
默认情况下,管道日志进程无需调用 shell 即可生成。使用“|$”而不是“|”来使用 shell 生成(通常使用 /bin/sh -c):
这是 Apache 2.2 的默认行为。
例子:
# Write to files error-1.log and error-2.log, and echo to stdout
CustomLog "|$/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log"
我遇到的另一个问题:
- 双引号和横线之间不应该有空格。
"|$ ...
已验证。" |$ ...
不是。