Apache CustomLog para registrar o URL completo

16

Gostaria de adicionar uma CustomLogdiretiva à minha configuração do apache para registrar a URL completa solicitada (ou pelo menos a parte do host da URL). Eu tenho vários domínios sendo manipulados pela mesma instância do apache e gostaria de poder distinguir os domínios nos logs (como agora tudo o que vejo é "GET /"). Vejo na documentação do LogFormat que ele lista %Upara imprimir a parte do caminho da URL, mas estou procurando o host.

jrdioko
fonte

Respostas:

20

Continue lendo a LogFormatdocumentação e você encontrará:

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

O que significa que você pode incluir em sua configuração:

%{Host}i

As diretivas %ve %Vtambém podem obter o que você deseja.

% v sempre será o valor de ServerName(o "nome canônico" do seu host virtual). %V pode ser o valor de ServerNameou pode ser o valor do Hostcabeçalho HTTP , dependendo se você UseCanonicalNameativou ou não sua configuração (e se o cliente forneceu ou não um Hostcabeçalho).

larsks
fonte
Funcionará %{Host}imesmo para HTTP / 1.0? %Vparece certo à primeira vista, obrigado!
Jrdioko
Acredito que% {Host} i (ou qualquer% {...} i constrói) somente produzirá um resultado se esse cabeçalho realmente existir na solicitação. Portanto, para HTTP / 1.0, eu não esperaria que fosse útil.
larsks
Mais um esclarecimento: %Vserá idêntico a %{Host}ise UseCanonicalNameestiver desativado?
Jrdioko
11
De acordo com a documentação, "Com o UseCanonicalName desativado, o Apache formará URLs auto-referenciais usando o nome do host e a porta fornecidos pelo cliente, se houver algum (caso contrário, ele usará o nome canônico, conforme definido acima)." Então %Vserá usado ServerNamese não houver Hostcabeçalho.
Larsks
2

'% v' é o nome do servidor que pode ser o que você deseja?

agy
fonte
Parece que %vsempre retorna a mesma string na minha situação: o valor ServerName, independentemente do domínio que aparece na URL. Mas %Vparece que faz a coisa certa.
Jrdioko
Isso está relacionado ao nome do host virtual
Robert
2

Adicione %vao seu formato de log.

Algo assim:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost
Shane Madden
fonte
11
Parece que %vsempre retorna a mesma string na minha situação: o valor ServerName, independentemente do domínio que aparece na URL. Mas %Vparece que faz a coisa certa.
Jrdioko
2

LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent} i \ "% {Host} i% U% q "combinado

%{Host}i%U%qdá URL completo.

borayeris
fonte