2009-05-07 15 views
2

Ich benutze Catalyst (MVC-Framework für Perl), aber die Frage gilt wahrscheinlich für alle MVC-Framework.Beste Möglichkeit zum Speichern von Protokollen/Statistiken

Bis jetzt nutzte ich die Apache-Log-Dateien, um Statistiken über die Besucher zu erhalten: Benutzer-Agent, URL-Zugriff, Zeit usw. Aber jetzt, wo ich zu einem MVC-Framework wechselte, halte ich das nicht für angemessen. Wenn eine Anfrage an/1/foo und/1/bar für mich die gleiche ist, möchte ich zum Beispiel nur/1/in meinem Log anzeigen.

Also frage ich mich, was ist der beste Weg, um meine eigenen Protokolldateien für Statistiken zu generieren. Sollte ich es als nur eine andere Protokolldatei in meiner Anwendung behandeln?

Diese Statistiken können jederzeit protokolliert werden. Idealerweise werden sie protokolliert, nachdem die Seite an den Benutzer gesendet wurde, so dass die zusätzliche Zeit für die Protokollierung nicht spürbar ist.

Antwort

4

Da Catalyst bereits Subroutinenattribute großzügig verwendet, könnte es sinnvoll sein, ein Attribut zu verwenden, um die relevanten Subs in einen benutzerdefinierten Protokollierungsmechanismus einzubinden. Ich schrieb an article über diese Technik, die Protokollierung als Beispiel verwendet. Die Grundidee ist:

2

friedos Antwort ist unglaublich geschickt, wenn dieser Grad an Flexibilität erforderlich ist.

OTOH Sie können weiterhin die Apache error_log verwenden, um diese Daten aufzuzeichnen, indem Sie $c->log->info() oder eines seiner Geschwister verwenden. Es ist ziemlich trivial, Catalyst :: Log zu erweitern, um andere Arten von Nachrichten zu melden. Ich verwende eine $c->log->sql() Variante, die SQL out in das error_log schreibt, das zum Beispiel über SQL :: Beautify ausgeführt wurde.

ich etwas entlang der Linien von

sub auto { 
    ... 
    $c->log->audit(sprintf("%s called by %s", $c->action->reverse, $c->userid)); 
    ... 
} 

vorstellen kann es zu Beginn (in auto) zu setzen ist nicht das, was Sie wollen, aber es ist auf jeden Fall weniger problematisch, da Sie es wissen, wird immer aufgerufen, im Gegensatz zu Ende Handler.

Verwandte Themen