extract real coller and whole call stack
[pxelator] / lib / PXElator / CouchDB.pm
index 53a12de..f688660 100644 (file)
@@ -121,17 +121,26 @@ sub audit {
        $url =~ s/\s+-\S+//g;   # remove command line options
        $url =~ s/\W+/-/g;
 
-       my ( $package, $file, $line, $sub ) = caller(1);
-       ( $package, undef, $line ) = caller(0) if ! $package || $package eq 'main';
-
-       my $time = time();
-       $sub =~ s{^.+::}{}; # stip package name
+       my $time = $data->{time} = time();
+
+       my @caller_name = ( qw/package file line sub/ );
+       my @caller = caller(0);
+       $caller[3] =~ s{^.+::}{}; # stip package name from sub
+       $data->{ $caller_name[$_] } = $caller[$_] foreach ( 0 .. $#caller_name );
+
+       my $caller;
+       my $depth = 0;
+       while ( my @c = caller($depth) ) {
+               push @$caller, [ @c ];
+               $depth++;
+       }
 
-       $data->{$_} = eval '$' . $_ foreach ( qw/time package line sub/ );
+       $data->{caller} = $caller;
 
 #      carp 'audit ', dump($data);
 
-       $time = int($time); # reduce granularity
+       $time = int($time); # reduce granularity for url
+       my $package = $caller[0];
        $audit->put( "pxelator/$time.$package.$url", $data );
 
 }