Åtkomstlogg
serverns åtkomstlogg registrerar alla förfrågningar som behandlas av servern. Platsen och innehållet i åtkomstloggen styrs avCustomLog
– direktivet. LogFormat
– direktivet kan användas för att förenkla valet av innehållet i loggarna. Det här avsnittet beskriver hur du konfigurerar servern för att spela in information i åtkomstloggen.
naturligtvis är lagring av informationen i åtkomstloggen bara början på logghantering., Nästa steg är att analysera denna information för att producera användbar statistik. Log analys i allmänhet ligger utanför ramen för detta dokument, och inte riktigt en del av jobbet för webbservern själv. För mer information om detta ämne, och för program som utför logganalys, kontrollera den öppna katalogen.
olika versioner av Apache httpd har använt andra moduler och direktiv för att styra åtkomstloggning, inklusive mod_log_referer, mod_log_agent och TransferLog
– direktivet., DirektivetCustomLog
utgår nu från funktionaliteten i alla äldre direktiv.
formatet för åtkomstloggen är mycket konfigurerbart. Formatet anges med hjälp av en formatsträng som ser ut ungefär som en C-stil printf(1) formatsträng. Några exempel presenteras i nästa avsnitt. En fullständig lista över möjliga innehåll i formatsträngen finns i formatsträngarna mod_log_config
.
Common Log Format
en typisk konfiguration för åtkomstloggen kan se ut som följer.,
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/access_log common
detta definierar smeknamnetcommon
och associerar det med en viss loggformatsträng. Formatsträngen består av procentdirektiv, som var och en berättar för servern att logga en viss information. Bokstavliga tecken kan också placeras i formatsträngen och kopieras direkt i loggutmatningen. Citattecknet ("
) måste rymmas genom att placera ett backslash innan det för att förhindra att det tolkas som Slutet på formatsträngen., Formatsträngen kan också innehålla specialkontrolltecken ”\n
” för New-line och ”\t
” för flik.
direktivetCustomLog
skapar en ny loggfil med det definierade smeknamnet. Filnamnet för åtkomstloggen är relativt ServerRoot
om det inte börjar med ett snedstreck.
ovanstående konfiguration kommer att skriva loggposter i ett format som kallas Common Log Format (CLF). Detta standardformat kan produceras av många olika webbservrar och läsas av många logganalysprogram., Loggfilsposterna som produceras i CLF kommer att se ut så här:
127.0.0.1 - frank "GET /apache_pb.gif HTTP/1.0" 200 2326
varje del av den här loggposten beskrivs nedan.
127.0.0.1
(%h
) detta är klientens IP-adress (fjärrvärd) som gjorde begäran till servern. OmHostnameLookups
är inställt påOn
, försöker servern bestämma värdnamnet och logga det i stället för IP-adressen. Denna konfiguration rekommenderas dock inte eftersom den kan sakta ner servern avsevärt., Istället är det bäst att använda en log post-processor somlogresolve
för att bestämma värdnamnen. IP-adressen som rapporteras här är inte nödvändigtvis adressen till den maskin där användaren sitter. Om en proxyserver finns mellan användaren och servern, kommer den här adressen att vara proxyens adress, snarare än den ursprungliga datorn.-
(%l
)” bindestrecket ” i utmatningen indikerar att den begärda informationen inte är tillgänglig., I det här fallet är den information som inte är tillgänglig klientens RFC 1413-identitet bestämd avidentd
på klientdatorn. Denna information är mycket opålitlig och bör nästan aldrig användas utom på tätt kontrollerade interna nätverk. Apache httpd kommer inte ens försöka bestämma denna information omIdentityCheck
är inställd påOn
.frank
(%u
) detta är användarid för den person som begär dokumentet enligt HTTP-autentisering., Samma värde tillhandahålls vanligtvis till CGI-skript i miljövariabelnREMOTE_USER
. Om statuskoden för begäran (se nedan) är 401, bör det här värdet inte lita på eftersom användaren ännu inte är autentiserad. Om dokumentet inte är lösenordsskyddat kommer den här delen att vara ”-
” precis som den föregående.(
%t
) när begäran mottogs., Formatet är:
det är möjligt att få tiden visad i ett annat format genom att ange %{format}t
I loggformatsträngen, där format
är antingen som i strftime(3)
från C-standardbiblioteket eller en av de speciella tokens som stöds. Mer information finns i formatsträngarnamod_log_config
.
"GET /apache_pb.gif HTTP/1.0"
(\"%r\"
) förfrågningsraden från klienten ges i dubbla citat. Begäran raden innehåller en hel del användbar information., För det första är den metod som används av klientenGET
. För det andra begärde klienten resursen/apache_pb.gif
och för det tredje använde klienten protokolletHTTP/1.0
. Det är också möjligt att logga en eller flera delar av förfrågningslinjen självständigt. Formatsträngen ”%m %U%q %H
” loggar till exempel metoden, sökvägen, frågesträngen och protokollet, vilket resulterar i exakt samma utmatning som ”%r
”.200
(%>s
) detta är den statuskod som servern skickar tillbaka till klienten., Denna information är mycket värdefull, eftersom det visar om begäran resulterade i ett framgångsrikt svar (koder som börjar i 2), en omdirigering (koder som börjar i 3), Ett fel som orsakas av klienten (koder som börjar i 4) eller ett fel i servern (koder som börjar i 5). Den fullständiga listan över möjliga statuskoder finns i HTTP-specifikationen (RFC2616 avsnitt 10).
2326
(%b
) den sista delen anger storleken på objektet som returneras till klienten, inte inklusive svarshuvuden., Om inget innehåll returnerades till klienten kommer detta värde att vara ”-
”. För att logga ”0
” för Inget innehåll, använd%B
istället.
kombinerat loggformat
en annan vanlig formatsträng kallas det kombinerade Loggformatet. Den kan användas enligt följande.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog log/access_log combined
det här formatet är exakt detsamma som det vanliga Loggformatet, med tillägg av ytterligare två fält. Var och en av de ytterligare fälten använder procentdirektivet %{header}i
, där huvudet kan vara någon HTTP-begärande rubrik., Åtkomstloggen under detta format kommer att se ut:
de ytterligare fälten är:
"http://www.example.com/start.html"
(\"%{Referer}i\"
) HTTP-sidhuvudet ”Referer” (SIC). Detta ger den webbplats som klientrapporterna har hänvisats från. (Detta bör vara den sida som länkar till eller innehåller/apache_pb.gif
)."Mozilla/4.08 (Win98; I ;Nav)"
(\"%{User-agent}i\"
) HTTP-sidhuvudet för användaragent. Detta är den identifierande information som klientbläddraren rapporterar om sig själv.,
flera åtkomstloggar
flera åtkomstloggar kan skapas genom att ange flera CustomLog
– direktiv i konfigurationsfilen. Följande direktiv kommer till exempel att skapa tre åtkomstloggar. Den första innehåller grundläggande CLF-information, medan den andra och tredje innehåller referer och webbläsarinformation. De två sista linjerna CustomLog
visar hur man efterliknar effekterna av direktivenReferLog
ochAgentLog
.,
det här exemplet visar också att det inte är nödvändigt att definiera ett smeknamn med LogFormat
– direktivet. Istället kan loggformatet anges direkt i CustomLog
– direktivet.
villkorliga loggar
det finns tillfällen då det är lämpligt att utesluta vissa poster från åtkomstloggarna baserat på egenskaperna hos klientbegäran. Detta uppnås enkelt med hjälp av miljövariabler. För det första måste en miljövariabel ställas in för att indikera att begäran uppfyller vissa villkor., Detta uppnås vanligtvis med SetEnvIf
. Då används env=
– klausulen i CustomLog
– direktivet för att inkludera eller utesluta begäranden där miljövariabeln är inställd. Några exempel:
som ett annat exempel kan du överväga att logga förfrågningar från engelsktalande till en loggfil och icke-engelsktalande till en annan loggfil.
SetEnvIf Accept-Language "en" englishCustomLog logs/english_log common env=englishCustomLog logs/non_english_log common env=!english
i ett cachningsscenario skulle man vilja veta om cachens effektivitet., En mycket enkel metod för att ta reda på detta skulle vara:
SetEnv CACHE_MISS 1LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cacheCustomLog logs/access_log common-cache
mod_cache
kommer att köras innan mod_env
och, när det lyckas, kommer att leverera innehållet utan det. I så fall loggar en cache-träff -
, medan en cache-miss loggar 1
.,
förutomenv=
syntax,LogFormat
stöder loggningsvärden som är villkorade av HTTP-svarskoden:
LogFormat "%400,501{User-agent}i" browserlogLogFormat "%!200,304,302{Referer}i" refererlog
i det första exemplet loggasUser-agent
om HTTP-statuskoden är 400 eller 501. I andra fall loggas en bokstavlig ”-” istället. På samma sätt loggas Referer
I det andra exemplet om HTTP-statuskoden inte är 200, 204 eller 302. (Notera ”!”före statuskoderna.,
Även om vi just har visat att villkorlig loggning är mycket kraftfull och flexibel, är det inte det enda sättet att kontrollera innehållet i loggarna. Loggfiler är mer användbara när de innehåller en fullständig post över serverns aktivitet. Det är ofta lättare att helt enkelt efterbehandla loggfilerna för att ta bort förfrågningar som du inte vill överväga.