LogFormat

V souboru httpd.conf se dá nastavit logování. Zápis sestává ze dvou věcí:

  1. nastavení formátu, jak bude záznam o přístupu vypadat (a jeho pojmenování)
  2. zapnutí logování s konkrétním jménem formátu a určení souboru, kam se to bude psát.

Příklady logovacích formátů:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %t %>s %U %{Referer}i" dusan

LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

To poslední je jméno. Bacha, v tomto textu se lámou řádky.

Zápis do souboru se zadá třeba takto:

CustomLog logs/access.log dusan

(některé zdroje uvádějí TransferLog nebo AccessLog)

Cesta souboru se odvozuje od ServerRoot nebo se dá zapsat absolutně (v rámci serveru, s lomítkem na začátku). V souboru se pro každý přístup vytvoří řádek, který bude obsahovat údaje o přístupu. Které údaje to budou, nastavují ta písmenka v masce, neboli formát logu. 

Použitelné formáty

Do logovací masky se dají psát normální znaky, escapované znaky (nejčastěji uvozovky \") a speciální klíčové znaky uvozené procenty

%b
Počet odeslaných bajtů
%{proměnná}e
Hodnota proměnné prostředí proměnná
%f
Jméno odesílaného souboru (jméno ve filesystému serveru, např. /var/htdocs/index.html)
%h
Vzdálený hostitel
%{hlavička}i
Obsah záhlaví jménem hlavička z klientského http požadavku, např. Referer nebo User-Agent, vizte níže.
%{Referer}i
Soubor, který obsahoval odkaz, na který bylo "kliknuto"
%{User-Agent}i
Identifikace prohlížeče (obecně klienta). Posílá se takový ten děsně dlouhý řetězec "Mozilla?"
%{Cookie}i
Řetězec cookie platný pro danou doménu nebo stránku (netestováno).
%{Accept-Language}i
Jazyk prohlížeče (netestováno)
%l
Jméno vzdáleného záznamu (od procesu identd, pokud je dodáno) ?-)
%{hlavička}o
Obsah záhlaví jménem hlavička ze serverové http odpovědi
%P
Identifikátor PID podřízené instance Apache zpracovávající požadavek
%p
Port serveru
%q
Query string, dotaz. Část adresy za otazníkem. Na začátku query string je otazník. Pokud je query string prázdná, do logu se nepíše vůbec nic (tedy ani spojovník -).
%r 
První řádek požadavku. Obvykle se dává mezi \" uvozovky \", protože není zaručen přesný počet interních mezer; odlišnosti by pak znesnadnily analýzu.
%s
Stavová informace: u interně přesměrovaných požadavků se uvádí stav původního požadavku.
%>s
Totéž pro poslední požadavek (zajímavější položka než %s)
%t
Čas v obecném formátu, to znamená např. [20/Dec/2001:14:37:36 +0100]
%{format}t
Čas v nastavitelném formátu podle strftime(3)
%U 
Požadované URL
%u
Vzdálený uživatel; info od modulu auth
%v
Virtuální hostitel serveru

Příklad

LogFormat "%h %l %u %t \"%r\" %>s %b" common

se zaznamenal takto (zde se lámou řádky, normálně je každý záznam na jednom):

127.0.0.1 - - [20/Jan/2001:16:47:57 -0800] "GET / HTTP/1.1" 200 1396
127.0.0.1 - - [20/Jan/2001:16:47:57 -0800] "GET /apache_pb.gif HTTP/1.1" 200 2326
127.0.0.1 - - [20/Jan/2001:16:49:17 -0800] "GET / HTTP/1.1" 200 1396
127.0.0.1 - - [20/Jan/2001:16:49:17 -0800] "GET /apache_pb.gif HTTP/1.1" 304 -

127.0.0.1 je IP klienta (v tomto případě lokál), odpovídá klíči %h

%l a %u (identifikátor a jméno uživatele) nebyly dostupné, takže se zaznamenaly znakem -

čas se zaznamenal v obecném formátu. -0800 znamená časové pásmo Mountain time (např. Utah)

\"%r\" je v uvozovkách uzavřený první řádek požadavku. Je velmi zajímavý, protože obsahuje dost podstatného: "metoda požadovaný_soubor verze_HTTP_protokolu". Např. GET je metoda požadavku, "/" je adresa kořene dokumentů a HTTP/1.1 je verze HTTP.

Jiné znaky a tabulátory

V předchozích příkladech se používaly jako oddělovače mezery. Je možno použít libovolné další znaky, které se normálně zaznamenají do logu:

LogFormat "IP: %h, url: %u" Citelny

Výsledný log bude v "čitelné" podobě.

Potřebujete-li ve výsledném logu uvozovky, předřaďte jim zpětné lomítko (je vidět na příkladu výše). Chcete-li oddělovat pomocí tabulátorů, zapište je znakem \t. Například

LogFormat "%h\t%u" Tabulatorovy

zaznamená IP a požadované url oddělené tabulátorem.

Například Daniel.Peder@Infoset.Cz zmínil v konverenci SEO tento zápis:

LogFormat "[%{%Y-%m-%d %H:%M:%S %Z}t] %V %h %r %>s %b\t%{REFERER}i\t%{COOKIE}i\t%{User-agent}i\t%{Accept-Language}i" jmeno

Všimněte si také zaznamenání cookie.

Podmínky

Pomocí klíčů se nastavuje složení zaznamenaných údajů = složení sloupců. Dá sa ale nastavit i omezení jen na některé požadavky = řádkový filtr. Prostě se některé přístupy nebudou zaznamenávat.

Jediné snadné omezení je podle HTTP kódu odpovědi. Když mě budou zajímat pouze úspěšně vyřízené požadavky (kód 200), napíšu před libovolný klíč prostě 200, např.: "%200U" Dá se to negovat vykřičníkem, logické spojení OR více hodnot se dělá čárkou.

Syntaxe záznamových podmínek by měla být %[podmínka]klíč. Neodhalil jsem však zatím syntaxe podmínek a nemám ani žádný příklad.

Jiný přepis parametrů:

 %a: vzdálená IP adresa, 

 %A: místní IP adresa, 
 
 %B: bytů posláno, včetně HTTP záhlaví, 
 
 %b: bytů posláno, kromě HTTP záhlaví, v obecném logovém formátu má 
 hodnotu '-' spíše než nula, když nebyly poslány byty žádné, 
 
 %c: status spojení, když odpověď je kompletní, 
 
 	'X' = spojení přerušeno, odpověď je nekompletní 
 
 	'+' = spojení má zůstat zachováno po poslání odpovědi 
 
	 '-' = spojení bude ukončeno po zaslání odpovědi. 
 
 %{promenna}e: obsah proměnné promenna 
 
 %f: jméno souboru 
 
 %h: vzdálený počítač 
 
 %H požadovaný protokol 
 
 %{promenna}i: obsah proměnné promenna: hlavičkový řádek (řádek) v požadavku 
 zaslaným serveru 
 
 %l: vzdálené logname 
 
 %m požadovaná metoda 
 
 %{promenna}n: obsah sdělení "promenna" od jiného modulu 
 
 %{promenna}o: obsah promenna: hlavička řádku (řádků) v odpovědi 
 
 %p: port serveru 
 
 %P: ID procesu, který obsluhuje požadavek 
 
 %q: dotazovací řetězec (končí znakem ? pokud existuje, jinak je to 
 prázdný řetězec) 
 
 %r: první řádek požadavku 
 
 %s: status 
 
 %t: čas 
 
 %{format}t: čas ve formě dané formátem 
 
 %T: čas vyžadující obsluhu požadavku, v sekundách 
 
 %u: vzdálený uživatel 
 
 %U: požadovaná URL cesta 
 
 %v: jméno serveru obsluhující požadavek 

Tohle jsem někde kdysi našel a trochu se to liší, tak to raději uvádím.

Formát času

Slouží ke konfigurovatelnému zápisu času %t. Zapisuje se podle standardu strftime(3). Příklad:

%{%A}t

vypíše saturday

Použitelné symboly:

%a
zkrácené jméno dne v týdnu (anglicky)
%A
celé jméno dne v týdnu (anglicky)
%b
zkrácené jméno měsíce (anglicky)
%B
celé jméno měsíce (anglicky)
%c
anglický preferovaný zápis data a času, např. Sat Jan 03 22:57:15 2004
%d
den v měsíci jako desítkové číslo (rozsah 01 až 31).
%H
hodina jako desítkové číslo (rozsah 00 až 23).
%I
hodina jako desítkové číslo, ale jenom do dvanácti (rozsah 01 až 12).
%j
číslo dne v roce jako desítkové číslo (rozsah 001 až 366).
%m
měsíc jako desítkové číslo (rozsah 01 až 12).
%M
minuta jako desítkové číslo
%p
Buď "am", nebo "pm"
%S
Sekundy jako desítkové číslo
%U
Číslo týdne v aktuálním roce jako desítkové číslo, počínaje první nedělí jako prvním dnem prvního týdne.
%W
totéž co %U, akorát počínaje prvním pondělím.
%w
číslo dne v týdnu desítkově, neděle je 0
%y
Rok jako desítkové číslo bez století (rozsah 00 až 99).
%Y
Rok včetně století (např. 2004).
%Z
Časové pásmo
%%
znak "%"

Jakýkoli další znak, který se zapíše do formátu času, se bude zapisovat do logu.

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Encyklopedie FrontPage Reklama PHP Server

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.