File Coverage

blib/lib/Plack/Middleware/LogErrors.pm
Criterion Covered Total %
statement 27 27 100.0
branch 6 6 100.0
condition 9 11 81.8
subroutine 10 10 100.0
pod 2 2 100.0
total 54 56 96.4


line stmt bran cond sub pod time code
1 1     1   80821 use strict;
  1         13  
  1         30  
2 1     1   4 use warnings;
  1         3  
  1         42  
3             package Plack::Middleware::LogErrors; # git description: v0.002-21-g414ec0a
4             # vim: set ts=8 sts=4 sw=4 tw=115 et :
5             # ABSTRACT: Map psgi.errors to psgix.logger or other logger
6             # KEYWORDS: plack middleware errors logging environment I/O handle
7              
8             our $VERSION = '0.003';
9              
10 1     1   5 use parent 'Plack::Middleware';
  1         1  
  1         4  
11              
12 1     1   10270 use Plack::Util::Accessor 'logger';
  1         1  
  1         4  
13 1     1   32 use Scalar::Util ();
  1         1  
  1         203  
14              
15             sub prepare_app
16             {
17 4     4 1 12034 my $self = shift;
18 4 100 100     13 die "'logger' is not a coderef!"
19             if $self->logger and not __isa_coderef($self->logger);
20             }
21              
22             sub call
23             {
24 3     3 1 18796 my ($self, $env) = @_;
25              
26 3   100     9 my $logger = $self->logger || $env->{'psgix.logger'};
27              
28 3 100       32 die 'no psgix.logger in $env; cannot map psgi.errors to it!'
29             if not $logger;
30              
31             # convert to something that matches the psgi.errors specs
32 2         9 $env->{'psgi.errors'} = Plack::Middleware::LogErrors::LogHandle->new($logger);
33              
34 2         9 return $self->app->($env);
35             }
36              
37             sub __isa_coderef
38             {
39 2 100 50 2   66 ref $_[0] eq 'CODE'
      66        
40             or (Scalar::Util::reftype($_[0]) || '') eq 'CODE'
41             or overload::Method($_[0], '&{}')
42             }
43              
44             package # hide from PAUSE
45             Plack::Middleware::LogErrors::LogHandle;
46             # ABSTRACT: convert psgix.logger-like logger into an IO::Handle-like object
47              
48             sub new
49             {
50 2     2   5 my ($class, $logger) = @_;
51 2         6 return bless { logger => $logger }, $class;
52             }
53              
54             sub print
55             {
56 2     2   28 my ($self, $message) = @_;
57 2         9 $self->{logger}->({
58             level => 'error',
59             message => $message,
60             });
61             }
62              
63             1;
64              
65             __END__