Apache 中每个虚拟主机可以有 2 个错误日志吗?

Apache 中每个虚拟主机可以有 2 个错误日志吗?

我有大约 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

根据Apache 2.4 日志文档

默认情况下,管道日志进程无需调用 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"

我遇到的另一个问题:

  • 双引号和横线之间不应该有空格。
    • "|$ ...已验证。
    • " |$ ...不是。

相关内容