Apache CustomLog记录完整URL


16

我想CustomLog在我的apache配置中添加一条指令,以记录所请求的完整URL(或至少URL的主机部分)。我有几个域由同一个apache实例处理,并且希望能够区分日志中的域(因为我现在看到的只是“ GET /”)。我在LogFormat的文档中看到它列出%U来打印URL的路径部分,但我正在寻找主机。

Answers:


20

继续阅读LogFormat文档,您会发现:

%...{Foobar}i:  The contents of Foobar: header line(s) in the request
                sent to the server.

这意味着您可以在配置中包括:

%{Host}i

%v%V指令也可以得到你想要的东西。

%v将始终是ServerName(虚拟主机的“规范名称”)的值。 %V 可以是的值ServerName,也可以是HTTP Host标头的值,具体取决于您是否已UseCanonicalName在配置中启用(以及客户端是否提供了Host标头)。


%{Host}i工作即使对于HTTP / 1.0?%V乍一看看起来不错,谢谢!
jrdioko 2011年

我相信%{Host} i(或任何%{...} i构造)只会在请求中确实存在该标头时才产生结果。因此,对于HTTP / 1.0,我认为它不会有用。
larsks 2011年

再澄清一遍:那么是否被禁用%V等同?%{Host}iUseCanonicalName
jrdioko 2011年

1
根据文档,“如果不使用UseCanonicalName,则Apache将使用客户端提供的主机名和端口(如果提供了主机名和端口,则将形成自引用URL(否则,它将使用如上定义的规范名称)”)。因此,如果没有头%V将使用。ServerNameHost
larsks 2011年

2

'%v'是您想要的ServerName吗?


%v在我的情况下,看起来总是返回相同的字符串:ServerName值,而不管URL中出现哪个域。但是%V看起来它做对了。
jrdioko 2011年

这与虚拟主机名有关
罗伯特·

2

添加%v到您的日志格式。

像这样:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost

1
%v在我的情况下,看起来总是返回相同的字符串:ServerName值,而不管URL中出现哪个域。但是%V看起来它做对了。
jrdioko 2011年

2

LogFormat“%h%l%u%t \”%r \“%> s%b \”%{Referer} i \“ \”%{User-Agent} i \“%{Host} i%U%q合并

%{Host}i%U%q给出完整的URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.