| Gungho documentation | Contained in the Gungho distribution. |
Gungho::Plugin::RequestLog - Log Requests
plugins:
- module: RequestLog
config:
- module: File
file: /path/to/filename
If you want to know what Gungho's fetching, load this plugin.
The regular logs are logged at 'info' level, so don't set min_level to above 'info' in the config. See Log::Dipatch for details.
The basic log format is
CURRENT_TIME | ELAPSED TIME | RESPONSE CODE | URI | REQUEST ID
For the rare cases where for some reason you believe the request has been requested to be fetched but the response isn't coming back, set the min_level of the log config to debug:
plugins:
- module: RequestLog
config:
- module: File
file: /path/to/filename
min_level: debug
When you enable debug, lines like this will be logged at send_request time
# CURRENT_TIME | URI | REQUEST ID
The leading '#' is there to aid you filter out the logs
| Gungho documentation | Contained in the Gungho distribution. |
# $Id: /mirror/gungho/lib/Gungho/Plugin/RequestLog.pm 31117 2007-11-26T13:10:33.379262Z lestrrat $ # # Copyright (c) 2007 Daisuke Maki <daisuke@endeworks.jp> # All rights reserved. package Gungho::Plugin::RequestLog; use strict; use warnings; use base qw(Gungho::Plugin); use Gungho::Log::Dispatch; BEGIN { eval "use Time::HiRes"; if (! $@) { Time::HiRes->import( 'time' ); } } __PACKAGE__->mk_accessors($_) for qw(log); sub setup { my ($self, $c) = @_; my $log = Gungho::Log::Dispatch->new(config => { logs => $self->config, callbacks => sub { my %args = @_; my $message = $args{message}; if ($message !~ /\n$/) { $message =~ s/$/\n/; } return $message; }, }); $log->setup($c); $self->log($log); $c->register_event('engine.send_request' => sub { $self->log_request(@_) } ); $c->register_event('engine.handle_response' => sub { $self->log_response(@_) } ); } sub log_request { my ($self, $event, $c, $data) = @_; # Only log this if we've been asked to do soA my $request = $data->{request}; my $uri = $request->original_uri; my $time = time(); $request->notes('send_request_time' => $time); $self->log->debug(sprintf("# %s | %s | %s", $time, $uri, $request->id)); } sub log_response { my ($self, $event, $c, $data) = @_; my( $request, $response ) = ($data->{request}, $data->{response}); my $time = time(); my $send_time = $request->notes('send_request_time'); # It's quite possible that we're dealing with a request that was sent # when this plugin wasn't loaded. In that case, do not calculate the # time elapsed my $elapsed; if(! defined $send_time ) { $elapsed = "(UNKNOWN)"; } else { $elapsed = $time - $send_time; } $request->notes('handle_response_time' => $time); $request->notes('total_request_time' => $elapsed); $self->log->info(sprintf("%s | %s | %s | %s | %s", $time, $elapsed, $response->code, $request->original_uri, $request->id)); } 1; __END__