Access Log
Jurnalul de acces la server înregistrează toate solicitările procesate de server. Locația și conținutul jurnalului de acces sunt controlate de Directiva CustomLog
. Directiva LogFormat
poate fi utilizată pentru a simplifica selectarea conținutului jurnalelor. Această secțiune descrie modul de configurare a serverului pentru a înregistra informații în Jurnalul de acces.desigur, stocarea informațiilor în Jurnalul de acces este doar începutul gestionării jurnalului., Următorul pas este de a analiza aceste informații pentru a produce statistici utile. Analiza jurnalului, în general, depășește domeniul de aplicare al acestui document și nu face parte din activitatea serverului web în sine. Pentru mai multe informații despre acest subiect și pentru aplicațiile care efectuează analiza jurnalului, verificați Open Directory.
Diferite versiuni de Apache httpd-au folosit alte module și directive de control acces de logare, inclusiv mod_log_referer, mod_log_agent, și TransferLog
directiva., Directiva CustomLog
subsumează acum funcționalitatea tuturor directivelor mai vechi.formatul jurnalului de acces este foarte configurabil. Formatul este specificat folosind un șir de format care arată mult ca un șir de format tip C printf(1). Câteva exemple sunt prezentate în secțiunile următoare. Pentru o listă completă a conținutului posibil al șirului de format, consultați șirurile de format mod_log_config
.
format jurnal comun
o configurație tipică pentru jurnalul de acces ar putea arăta după cum urmează.,
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/access_log common
Aceasta definește porecla common
și asociați-l cu un anumit format de jurnal șir. Șirul de format este format din directive procentuale, fiecare dintre acestea spunând serverului să înregistreze o anumită informație. Caracterele literale pot fi, de asemenea, plasate în șirul de format și vor fi copiate direct în ieșirea jurnalului. Caracterul citat ("
) trebuie să fie scăpat prin plasarea unui backslash înainte de a-l împiedica să fie interpretat ca sfârșitul șirului de format., Șirul de format poate conține, de asemenea, de control speciale de caractere „\n
” pentru nou-line și „\t
” pentru tab.
directiva CustomLog
stabilește un nou fișier jurnal folosind porecla definită. Numele fișierului pentru jurnalul de acces este relativ la ServerRoot
dacă nu începe cu o bară oblică.
configurația de mai sus va scrie intrările de jurnal într-un format cunoscut sub numele de Common Log Format (CLF). Acest format standard poate fi produs de multe servere web diferite și citit de multe programe de analiză a jurnalelor., Intrările de fișiere jurnal produse în CLF vor arăta astfel:
127.0.0.1 - frank "GET /apache_pb.gif HTTP/1.0" 200 2326
fiecare parte a acestei intrări de jurnal este descrisă mai jos.
127.0.0.1
(%h
) Aceasta este adresa IP a clientului (remote host) care a făcut cererea la server. DacăHostnameLookups
este setat laOn
, atunci serverul va încerca să determine hostname-ul și conectați-l în loc de adresa IP. Cu toate acestea, această configurație nu este recomandată, deoarece poate încetini semnificativ serverul., În schimb, este mai bine să utilizați un jurnal post-procesor, cum ar filogresolve
pentru a determina numele de gazdă. Adresa IP raportată aici nu este neapărat adresa mașinii la care se află utilizatorul. Dacă există un server proxy între utilizator și server, Această adresă va fi adresa proxy-ului, mai degrabă decât mașina de origine.-
(%l
)” cratima ” din ieșire indică faptul că informațiile solicitate nu sunt disponibile., În acest caz, informațiile care nu sunt disponibile sunt identitatea RFC 1413 a clientului determinată deidentd
pe mașina clienți. Aceste informații sunt extrem de nesigure și nu ar trebui să fie utilizate aproape niciodată, cu excepția rețelelor interne strict controlate. Apache httpd nici măcar nu va încerca să determine dacăIdentityCheck
este setat laOn
.frank
(%u
) acesta este userid-ul persoanei care solicită documentul determinat prin autentificarea HTTP., Aceeași valoare este de obicei furnizată scripturilor CGI în variabila de mediuREMOTE_USER
. Dacă codul de stare pentru solicitare (vezi mai jos) este 401, atunci această valoare nu trebuie să fie de încredere, deoarece utilizatorul nu este încă autentificat. Dacă documentul nu este protejat prin parolă, această parte va fi „-
” la fel ca cea anterioară.(
%t
) momentul În care cererea a fost primită., Formatul este:
este posibil să aveți timp afișat în alt format prin specificarea %{format}t
în jurnal în format șir de caractere, în cazul în care format
este fie ca în strftime(3)
din biblioteca standard C, sau unul dintre sprijinit jetoane speciale. Pentru detalii, consultați șirurile de format mod_log_config
.
"GET /apache_pb.gif HTTP/1.0"
(\"%r\"
) linia de solicitare de la client este dată în ghilimele duble. Linia de solicitare conține o mulțime de informații utile., În primul rând, metoda utilizată de client esteGET
. În al doilea rând, clientul a solicitat resurse/apache_pb.gif
, și în al treilea rând, clientul a folosit protocolHTTP/1.0
. De asemenea, este posibil să înregistrați una sau mai multe părți ale liniei de solicitare în mod independent. De exemplu, șirul de format „
%m %U%q %H
” va log metoda, calea, query-string, și a protocolului, care rezultă în exact aceeași putere ca „%r
„.200
(%>s
) acesta este codul de stare pe care serverul îl trimite înapoi la client., Aceste informații sunt foarte valoroase, deoarece dezvăluie dacă cererea a dus la un răspuns de succes (coduri început în 2), o redirectare (coduri începând din 3), o eroare cauzată de client (coduri început în 4), sau de o eroare de server (coduri începând din 5). Lista completă a codurilor de stare posibile poate fi găsită în specificația HTTP (RFC2616 secțiunea 10).2326
(%b
) ultima parte indică dimensiunea obiectului returnat clientului, inclusiv anteturile de răspuns., Dacă niciun conținut nu a fost returnat clientului, această valoare va fi „-
„. Pentru a vă conecta „0
„fără conținut, utilizați%B
în schimb.
format jurnal combinat
Un alt șir de format utilizat în mod obișnuit se numește format jurnal combinat. Poate fi folosit după cum urmează.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog log/access_log combined
acest format este exact același cu formatul obișnuit de jurnal, cu adăugarea a încă două câmpuri. Fiecare dintre câmpurile suplimentare utilizează Directiva procentuală %{header}i
, unde antetul poate fi orice antet de solicitare HTTP., Accesul jurnal sub acest format va arata astfel:
câmpuri suplimentare sunt:
"http://www.example.com/start.html"
(\"%{Referer}i\"
) A „Referer” (sic) cerere HTTP antet. Acest lucru oferă site-ului pe care clientul raportează că a fost trimis. (Aceasta ar trebui să fie pagina care leagă sau include/apache_pb.gif
)."Mozilla/4.08 (Win98; I ;Nav)"
(\"%{User-agent}i\"
) antetul cererii HTTP utilizator-Agent. Acestea sunt informațiile de identificare pe care browserul client le raportează despre sine.,
jurnalele de acces Multiple
jurnalele de acces Multiple pot fi create pur și simplu prin specificarea mai multor directive CustomLog
în fișierul de configurare. De exemplu, următoarele directive vor crea trei jurnale de acces. Primul conține informațiile de bază CLF, în timp ce al doilea și al treilea conțin informații despre referer și browser. Ultimele două CustomLog
linii de show cum pentru a imita efectele ReferLog
și AgentLog
directive.,
Acest exemplu arată, de asemenea, că nu este necesar să se definească un pseudonim cu Directiva LogFormat
. În schimb, formatul jurnalului poate fi specificat direct în Directiva CustomLog
.
jurnale condiționale
există momente în care este convenabil să excludem anumite intrări din jurnalele de acces pe baza caracteristicilor cererii clientului. Acest lucru este ușor de realizat cu ajutorul variabilelor de mediu. În primul rând, trebuie setată o variabilă de mediu pentru a indica faptul că cererea îndeplinește anumite condiții., Acest lucru este de obicei realizat cu SetEnvIf
. Apoi, clauza env=
din Directiva CustomLog
este utilizată pentru a include sau exclude cererile în care este setată variabila de mediu. Câteva exemple:
ca un alt exemplu, luați în considerare cererile de logare de la vorbitori de engleză la un fișier jurnal, și vorbitori non-engleză la un fișier jurnal diferit.
SetEnvIf Accept-Language "en" englishCustomLog logs/english_log common env=englishCustomLog logs/non_english_log common env=!english
într-un scenariu de cache ar dori să știe despre eficiența cache., O metoda foarte simpla de a afla acest lucru ar fi:
SetEnv CACHE_MISS 1LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cacheCustomLog logs/access_log common-cache
mod_cache
va rula înainte mod_env
și, atunci când de succes, va livra conținut fără ea. În acest caz, un cache hit va log -
, în timp ce un cache miss va log 1
.,
În plus față de env=
sintaxa, LogFormat
sprijină exploatarea valori condiționată de cod de răspuns HTTP:
LogFormat "%400,501{User-agent}i" browserlogLogFormat "%!200,304,302{Referer}i" refererlog
În primul exemplu, User-agent
va fi înregistrat dacă codul de stare HTTP este de 400 sau 501. În alte cazuri, un literal ” – ” va fi înregistrat în schimb. De asemenea, în al doilea exemplu, Referer
va fi înregistrat dacă codul de stare HTTP nu este 200, 204 sau 302. (Notă”!”înainte de codurile de stare.,deși tocmai am arătat că logarea condiționată este foarte puternică și flexibilă, nu este singura modalitate de a controla conținutul jurnalelor. Fișierele jurnal sunt mai utile atunci când conțin o înregistrare completă a activității serverului. Adesea este mai ușor să post-procesați fișierele jurnal pentru a elimina solicitările pe care nu doriți să le luați în considerare.