给ServerAlias配置的域名配置单独的访问日志

今天在项目中用到了apache的这种用法,就是同一个VirtualHost上绑定了很多的域名,主要是一个主要的和一个ServerAlias指令配置的别名。但是不同的域名是有不同的作用的,这时候把日志混写在一个日志文件中实在是不方便调试和跟踪。

开始想到的方式是借助apache log format中的%v 和 %V选项,但是发现都不起作用。解释是因为%v只认VirtualHost的权威域名,这个可以参考文档:

  • https://httpd.apache.org/docs/2.2/mod/mod_log_config.html
  • 后来走不通怎么办呢,就试了试%V选项,发现还是一样不行。难道非要把日志重定向给一个脚本才能解决这个问题?还好天无绝人之路,后来使用了如下的方式就搞定了,部分配置参考

    LogFormat "%h %l %u %t %D \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" sinacloud
        ErrorLog     /data0/logs/www.sinacloud.com-error_log
       
        SetEnvIfNoCase Host sinacloud\.com sinacloud_no_www
        CustomLog /data0/logs/sinacloud.com-access_log sinacloud env=sinacloud_no_www

        SetEnvIfNoCase Host www\.sinacloud\.com sinacloud_www
        CustomLog /data0/logs/www.sinacloud.com-access_log sinacloud env=sinacloud_www

        SetEnvIfNoCase Host api\.sinacloud\.com sinacloud_api
        CustomLog /data0/logs/api.sinacloud.com-access_log sinacloud env=sinacloud_api