Frage

Ich benutze Katalysator (MVC-Framework für Perl), aber die Frage wahrscheinlich auf all MVC-Framework gilt.

Bisher habe ich die Logfiles für Statistiken über die Besucher zu erhalten: User-Agenten, URL zugegriffen, Zeit, etc. Aber jetzt, wo ich zu einem MVC-Framework bewegt, ich glaube nicht, das ausreichend ist. Wenn eine Anforderung / 1 / foo und / 1 / bar das gleiche für mich, ich will / 1 / in meinem Protokoll nur zeigen, zum Beispiel.

So fragt ich mich, was der beste Weg ist meine eigenen Protokolldateien für die Statistik zu generieren. Soll ich es einfach als eine weitere Protokolldatei in meiner Anwendung zu behandeln?

Diese Statistiken können jederzeit angemeldet werden. Im Idealfall würden sie angemeldet werden, nachdem die Seite an den Benutzer gesendet wird, so wird es nicht die zusätzliche Zeit für die Anmeldung erforderlich fühlen.

War es hilfreich?

Lösung

Da Katalysator bereits Subroutine verwendet zügig Attribut, ein sinnvoller Ansatz sein könnte, ein Attribut zu verwenden, um die entsprechenden U-Boote in einem benutzerdefinierten Logging-Mechanismus zu wickeln. Ich schrieb einen Artikel über diese Technik die verwendet als Beispiel die Protokollierung. Die Grundidee ist:

use Attribute::Handlers;

sub Log : ATTR(CODE) {
    my ($pkg, $sym, $code) = @_;


    my $name = *{ $sym }{NAME};

    no warnings 'redefine';

    *{ $sym } = sub {
        log_message("Entering sub $pkg\:\:$name");
        $code->( @_ );
    };
}

sub foo : Log { 
    # this will be logged
}

Andere Tipps

friedo Antwort ist unglaublich raffiniert, wenn das Maß an Flexibilität erforderlich ist.

OTOH können Sie auch weiterhin die Apache error_log verwenden, um diese Daten zu erfassen nur durch $c->log->info() oder eines seiner Geschwister. Es ist ziemlich trivial Katalysator zu erweitern :: Anmelden andere Arten von Nachrichten zu berichten. Ich benutze eine $c->log->sql() Variante, die SQL, um den error_log schreibt, die zum Beispiel durch SQL :: Verschönern, ausgeführt worden sind.

Ich kann etwas entlang der Linien von

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top