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