我有多个Apache 配置文件 00-project1.conf
,,01-project2.conf
... 并希望为所有这些设置一个日志文件和级别的方案。
目前,此类配置文件的一个示例如下
Define LOG_PATH /my/path/to/the/log
<VirtualHost XXX.XXX.XXX.XXX:80>
DocumentRoot "/what/ever/project11"
ServerName www.project11.org
ErrorLog ${LOG_PATH}/www.project11.org.error.log
CustomLog ${LOG_PATH}/www.project11.org.access.log common
LogLevel alert rewrite:trace3
</VirtualHost>
<VirtualHost XXX.XXX.XXX.YYY:80>
DocumentRoot "/what/ever/project12"
ServerName www.project12.org
ErrorLog ${LOG_PATH}/www.project12.org.error.log
CustomLog ${LOG_PATH}/www.project12.org.access.log common
LogLevel alert rewrite:trace3
</VirtualHost>
问题 1:我如何全局设置:(1)LOG_PATH
所有(或者更好的是,给定列表)配置文件的,(2)的LogLevel
,以及(3)取决于的和的的ErrorLog
和?CustomLog
LOG_PATH
ServerName
如果这个要求太高的话,那么......
问题2:有没有办法,在单一配置文件如上所述,将三个设置ErrorLog
、CostomLog
以及LogLevel
VH 之外的设置移动到文件的开头?
例子:
Define LOG_PATH /my/path/to/the/log
ErrorLog ${LOG_PATH}/${???ServerName???}.error.log
CostomLogLog ${LOG_PATH}/${???ServerName???}.access.log common
LogLevel alert rewrite:trace3
<VirtualHost XXX.XXX.XXX.XXX:80>
DocumentRoot "/what/ever/project11"
ServerName www.project11.org
</VirtualHost>
关于实际情况的一些背景信息:总的来说,我说的是 10-15 个 VH,所以我只能单独定义 10-15 次日志信息。尽管如此,这样做似乎很愚蠢。一些 VH 被转发到本地运行的 Web 服务,一些被转发到其他域,一些实际上有文档根,只有日志记录是统一的(这似乎不允许使用 @HBruijnmod_vhost_alias
建议的简单版本)。
答案1
据我所知,您不能使用变量。
但...
当文件名为自定义日志(或 ErrorLog)指令不是绝对的,换句话说,当它不以斜杠开头时/,它是相对于服务器根目录。可以在 httpd.conf 中设置 ServerRoot,或者使用编译时默认值。
您通常会看到从 SERVERROOT/logs 到用于日志目录和配置设置的所需文件系统位置的符号链接,例如:
符号链接: /usr/local/apache/logs --> /path/to/logs
ErrorLog "logs/www.project11.org.error.log"
CustomLog "logs/www.project12.org.access.log common"