如何使用 VH 的 ServerName 全局设置 Apache 日志文件夹和文件

如何使用 VH 的 ServerName 全局设置 Apache 日志文件夹和文件

我有多个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和?CustomLogLOG_PATHServerName

如果这个要求太高的话,那么......

问题2:有没有办法,在单一配置文件如上所述,将三个设置ErrorLogCostomLog以及LogLevelVH 之外的设置移动到文件的开头?

例子:

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"

相关内容