Apache CustomLog untuk mencatat URL lengkap

16

Saya ingin menambahkan CustomLogarahan ke konfigurasi apache saya untuk mencatat URL lengkap yang diminta (atau setidaknya bagian host dari URL). Saya memiliki beberapa domain yang ditangani oleh instance apache yang sama, dan ingin dapat membedakan domain dalam log (seperti yang sekarang saya lihat adalah "GET /"). Saya melihat dalam dokumentasi di LogFormat daftar %Uuntuk mencetak bagian jalur URL, tapi saya sedang mencari host.

jrdioko
sumber

Jawaban:

20

Terus baca LogFormatdokumentasi dan Anda akan menemukan:

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

Yang berarti Anda dapat memasukkan dalam konfigurasi Anda:

%{Host}i

The %vdan %Varahan juga bisa mendapatkan apa yang Anda inginkan.

% v akan selalu menjadi nilai ServerName("nama kanonik" dari host virtual Anda). %V mungkin nilai dari ServerName, atau mungkin nilai Hostheader HTTP , tergantung pada apakah Anda telah UseCanonicalNamemengaktifkan atau tidak dalam konfigurasi Anda (dan apakah klien memberikan Hostheader atau tidak ).

larsks
sumber
Akan %{Host}ibekerja bahkan untuk HTTP / 1.0? %Vterlihat benar pada pandangan pertama, terima kasih!
jrdioko
Saya percaya bahwa% {Host} i (atau% {...} i construct) hanya akan menghasilkan hasil jika header itu benar-benar ada dalam permintaan. Jadi untuk HTTP / 1.0, saya tidak berharap itu berguna.
larsks
Satu klarifikasi lagi: Jadi %Vapakah identik dengan %{Host}ijika UseCanonicalNamedinonaktifkan?
jrdioko
1
Menurut dokumentasi, "Dengan menonaktifkan UseCanonicalName, Apache akan membentuk URL rujukan diri menggunakan nama host dan port yang disediakan oleh klien jika ada yang disediakan (jika tidak maka akan menggunakan nama kanonik, sebagaimana didefinisikan di atas)." Jadi %Vakan digunakan ServerNamejika tidak ada Hostheader.
larsks
2

'% v' apakah ServerName itu yang Anda inginkan?

agy
sumber
Sepertinya %vselalu mengembalikan string yang sama dalam situasi saya: nilai ServerName terlepas dari domain apa yang muncul di URL. Tapi %Vsepertinya itu melakukan hal yang benar.
jrdioko
Itu terkait dengan nama virtualhost
Robert
2

Tambahkan %vke format log Anda.

Sesuatu seperti ini:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost
Shane Madden
sumber
1
Sepertinya %vselalu mengembalikan string yang sama dalam situasi saya: nilai ServerName terlepas dari domain apa yang muncul di URL. Tapi %Vsepertinya itu melakukan hal yang benar.
jrdioko
2

LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {Agen Pengguna} i \ "% {Host} i% U% q "Digabungkan

%{Host}i%U%qberikan url penuh

borayeris
sumber