OT: logování apache
Pavel Janík ml.
Pavel na Janik.cz
Úterý Listopad 14 21:55:37 CET 2000
From: Pavel Lisy <pali na tmapy.cz>
Date: Tue, 14 Nov 2000 13:23:04 +0100
Zdravím,
> Existuje v konfiguraci apache možnost, jak logovat čas na obsloužení
> požadavku, v direktivě CustomLog je to %T, přesněji než na celé
> sekundy, což je defaultní volba?
volba %T umožňuje logovat _jenom_ v sekundách. Vysvětlení je
jednoduché. Každý požadavek na Apache je zpracován funkcí read_request_line
(viz Apache/src/main/http_protocol.c), která vyplní položku request_time
datového typu požadavku:
r->request_time = time(0);
Funkce time (mimochodem, tahle nula by měla být NULL :-) vrací počet sekund
od začátku epochy. Známe tedy přesný (na sekundu) začátek požadavku.
Argument %T modulu mod_log_config
(Apache/src/modules/standard/mod_log_config.c) obsluhuje funkce
log_request_duration:
...
'T', log_request_duration, 1
...
která vypadá následovně:
static const char *log_request_duration(request_rec *r, char *a)
{
return ap_psprintf(r->pool, "%ld", time(NULL) - r->request_time);
}
vracený řetězec tedy obsahuje rozdíl mezi aktuálním počtem sekund od
začátku epochy a počtem sekund, které od epochy uběhly v době obdržení
požadavky. Tedy opět je to počet sekund.
<filosofie>
Dovedete si někdo představit, že byste tentýž postup aplikovali např. na MS
IIS? Dovedeme vůbec plně ocenit princip Open Source?
</filosofie>
> Jde to vůbec, pokud ano jak?
Určitě :-) Stačí modifikovat strukturu request_rec a všechny funkce, které
s položkou request_time pracují. Ale bylo by to neefektivní.
--
Pavel Janík ml.
Pavel na Janik.cz
http://www.janik.cz
Další informace o konferenci Linux