summary refs log tree commit diff
path: root/lib/Plack/Middleware/Debug/Dancer/Logger.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-04-18 11:46:33 +0200
committerfranck cuny <franck@lumberjaph.net>2010-04-18 11:46:33 +0200
commiteb4db48d0e65a3c7c23b7372566fa7121f0cd574 (patch)
tree733db3456f1b81203f4c8663f7b0c304854bb474 /lib/Plack/Middleware/Debug/Dancer/Logger.pm
parentinitial commit (diff)
downloaddancer-debug-eb4db48d0e65a3c7c23b7372566fa7121f0cd574.tar.gz
some dancer specific panel for debugging
Diffstat (limited to 'lib/Plack/Middleware/Debug/Dancer/Logger.pm')
-rw-r--r--lib/Plack/Middleware/Debug/Dancer/Logger.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/Plack/Middleware/Debug/Dancer/Logger.pm b/lib/Plack/Middleware/Debug/Dancer/Logger.pm
new file mode 100644
index 0000000..3fdc4e9
--- /dev/null
+++ b/lib/Plack/Middleware/Debug/Dancer/Logger.pm
@@ -0,0 +1,49 @@
+package Plack::Middleware::Debug::Dancer::Logger;
+use 5.008;
+use strict;
+use warnings;
+use parent qw(Plack::Middleware::Debug::Base);
+use Dancer::Logger;
+use Class::Method::Modifiers qw(install_modifier);
+our $VERSION = '0.07';
+
+# XXX Not thread/Coro/AE safe. Should use $c->env or something
+my $psgi_env;
+install_modifier 'Dancer::Logger', 'around', 'warning' => sub {
+    my $orig = shift;
+    my $self = shift;
+    $psgi_env->{'plack.middleware.dancer_log'} .= "[warning] $_[0]\n";
+    $self->$orig(@_);
+};
+
+install_modifier 'Dancer::Logger', 'around', 'error' => sub {
+    my $orig = shift;
+    my $self = shift;
+    $psgi_env->{'plack.middleware.dancer_log'} .= "[error] $_[0]\n";
+    $self->$orig(@_);
+};
+
+install_modifier 'Dancer::Logger', 'around', 'debug' => sub {
+    my $orig = shift;
+    my $self = shift;
+    $psgi_env->{'plack.middleware.dancer_log'} .= "[debug] $_[0]\n";
+    $self->$orig(@_);
+};
+
+sub run {
+    my($self, $env, $panel) = @_;
+    $psgi_env = $env;
+
+    return sub {
+        my $res = shift;
+
+        my $log = delete $env->{'plack.middleware.dancer_log'};
+        if ($log) {
+            $panel->content("<pre>$log</pre>");
+        }
+        $psgi_env = undef;
+    };
+}
+
+1;
+__END__