V souboru httpd.conf se dá nastavit logování. Zápis sestává ze dvou věcí:
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.
Do logovací masky se dají psát normální znaky, escapované znaky (nejčastěji uvozovky \") a speciální klíčové znaky uvozené procenty
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.
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.
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.
%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.
Slouží ke konfigurovatelnému zápisu času %t. Zapisuje se podle standardu strftime(3). Příklad:
%{%A}t
vypíše saturday
Použitelné symboly:
Jakýkoli další znak, který se zapíše do formátu času, se bude zapisovat do logu.
Jak psát web píše Yuhů, Dušan Janovský. Kontakt.