我们有一个使用DNS通配符的应用程序,即* .app.example.com。 我们在Ubuntu Hardy上使用Apache 2.2。 Apacheconfiguration的相关部分如下。
在/etc/apache2/httpd.conf中:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vlog
在/etc/apache2/sites-enabled/app.example.com中:
ServerName app.example.com ServerAlias *.app.example.com ... CustomLog "|/usr/sbin/vlogger -s access.log /var/log/apache2/vlogger" vlog
客户使用他们自己的URL访问该应用程序,例如company1.app.example.com,company2.app.example.com等。
以前, LogFormat指令中的%v将与客户端请求的主机名相匹配,我们会在/ var / log / apache2 / vlogger下获得与所使用的各种客户端URL相对应的多个子目录。
现在, %v似乎与ServerName值相匹配,所以我们只在/var/log/apache2/vlogger/app.example.com下面得到一个日志。 这打破了我们的日志文件分析,因为日志文件没有指示日志与哪个客户端相关。
我可以通过将LogFormat更改为:
LogFormat "%{Host}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vlog
这将使用HTTP主机:头告诉vlogger哪个子目录来创build日志,一切都会好起来的。
我唯一担心的是过去曾经有过这样的情况,而且我也看不出有什么迹象表明这种情况最近已经改变了。
有没有其他人使用类似的configuration,即通配符+ vlogger和使用%v ? 它工作正常吗?
%v是并且一直是vserver的规范名称,我只是检查了1.3,2.0和2.2的手册,他们都说
%...v: The canonical ServerName of the server serving the request.
https://httpd.apache.org/docs/1.3/mod/mod_log_config.html
还有%V (请注意上限)和useCanonicalName选项