| Filename | /appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm |
| Statements | Executed 1485 statements in 6.33ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 33 | 1 | 1 | 3.52ms | 7.50ms | Dancer::Logger::Abstract::format_message |
| 132 | 1 | 1 | 458µs | 1.78ms | Dancer::Logger::Abstract::__ANON__[:125] |
| 33 | 1 | 1 | 299µs | 9.66ms | Dancer::Logger::Abstract::debug |
| 33 | 1 | 1 | 259µs | 671µs | Dancer::Logger::Abstract::_should |
| 33 | 1 | 1 | 220µs | 1.18ms | Dancer::Logger::Abstract::__ANON__[:101] |
| 165 | 1 | 1 | 185µs | 185µs | Dancer::Logger::Abstract::CORE:substcont (opcode) |
| 33 | 1 | 1 | 164µs | 297µs | Dancer::Logger::Abstract::_log_format |
| 33 | 1 | 1 | 155µs | 155µs | Dancer::Logger::Abstract::CORE:subst (opcode) |
| 33 | 1 | 1 | 63µs | 63µs | Dancer::Logger::Abstract::__ANON__[:102] |
| 33 | 1 | 1 | 44µs | 44µs | Dancer::Logger::Abstract::__ANON__[:108] |
| 33 | 1 | 1 | 30µs | 30µs | Dancer::Logger::Abstract::__ANON__[:103] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::BEGIN |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:100] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:107] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:109] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:110] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:113] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:88] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:95] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:97] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::__ANON__[:98] |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::_log |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::core |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::error |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::info |
| 0 | 0 | 0 | 0s | 0s | Dancer::Logger::Abstract::warning |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package Dancer::Logger::Abstract; | ||||
| 2 | our $AUTHORITY = 'cpan:SUKRIA'; | ||||
| 3 | #ABSTRACT: Abstract logging engine for Dancer | ||||
| 4 | $Dancer::Logger::Abstract::VERSION = '1.3512'; | ||||
| 5 | use strict; | ||||
| 6 | use warnings; | ||||
| 7 | use Carp; | ||||
| 8 | use base 'Dancer::Engine'; | ||||
| 9 | |||||
| 10 | use Dancer::SharedData; | ||||
| 11 | use Dancer::Timer; | ||||
| 12 | use Dancer::Config 'setting'; | ||||
| 13 | use POSIX qw/strftime/; | ||||
| 14 | |||||
| 15 | # This is the only method to implement by logger engines. | ||||
| 16 | # It receives the following arguments: | ||||
| 17 | # $msg_level, $msg_content, it gets called only if the configuration allows | ||||
| 18 | # a message of the given level to be logged. | ||||
| 19 | sub _log { confess "_log not implemented" } | ||||
| 20 | |||||
| 21 | my $levels = { | ||||
| 22 | |||||
| 23 | # levels < 0 are for core only | ||||
| 24 | core => -10, | ||||
| 25 | |||||
| 26 | # levels > 0 are for end-users only | ||||
| 27 | debug => 1, | ||||
| 28 | info => 2, | ||||
| 29 | warn => 3, | ||||
| 30 | warning => 3, | ||||
| 31 | error => 4, | ||||
| 32 | }; | ||||
| 33 | |||||
| 34 | my $log_formats = { | ||||
| 35 | simple => '[%P] %L @%D> %i%m in %f l. %l', | ||||
| 36 | }; | ||||
| 37 | |||||
| 38 | # spent 297µs (164+132) within Dancer::Logger::Abstract::_log_format which was called 33 times, avg 9µs/call:
# 33 times (164µs+132µs) by Dancer::Logger::Abstract::format_message at line 127, avg 9µs/call | ||||
| 39 | 33 | 38µs | 33 | 132µs | my $config = setting('logger_format'); # spent 132µs making 33 calls to Dancer::Config::setting, avg 4µs/call |
| 40 | |||||
| 41 | 33 | 12µs | if ( !$config ) { | ||
| 42 | return $log_formats->{simple}; | ||||
| 43 | } | ||||
| 44 | |||||
| 45 | 33 | 69µs | exists $log_formats->{$config} | ||
| 46 | ? return $log_formats->{$config} | ||||
| 47 | : return $config; | ||||
| 48 | } | ||||
| 49 | |||||
| 50 | # spent 671µs (259+411) within Dancer::Logger::Abstract::_should which was called 33 times, avg 20µs/call:
# 33 times (259µs+411µs) by Dancer::Logger::Abstract::debug at line 140, avg 20µs/call | ||||
| 51 | 33 | 30µs | my ($self, $msg_level) = @_; | ||
| 52 | 33 | 142µs | 33 | 411µs | my $conf_level = setting('log') || 'debug'; # spent 411µs making 33 calls to Dancer::Config::setting, avg 12µs/call |
| 53 | |||||
| 54 | 33 | 41µs | if (!exists $levels->{$conf_level}) { | ||
| 55 | setting('log' => 'debug'); | ||||
| 56 | $conf_level = 'debug'; | ||||
| 57 | } | ||||
| 58 | |||||
| 59 | 33 | 79µs | return $levels->{$conf_level} <= $levels->{$msg_level}; | ||
| 60 | } | ||||
| 61 | |||||
| 62 | # spent 7.50ms (3.52+3.99) within Dancer::Logger::Abstract::format_message which was called 33 times, avg 227µs/call:
# 33 times (3.52ms+3.99ms) by Dancer::Logger::Console::_log at line 11 of Dancer/Logger/Console.pm, avg 227µs/call | ||||
| 63 | 33 | 28µs | my ($self, $level, $message) = @_; | ||
| 64 | 33 | 43µs | chomp $message; | ||
| 65 | |||||
| 66 | 33 | 157µs | 99 | 1.51ms | $message = Encode::encode(setting('charset'), $message) # spent 1.33ms making 33 calls to Encode::encode, avg 40µs/call
# spent 172µs making 66 calls to Dancer::Config::setting, avg 3µs/call |
| 67 | if setting('charset'); | ||||
| 68 | |||||
| 69 | 33 | 22µs | $level = 'warn' if $level eq 'warning'; | ||
| 70 | 33 | 53µs | $level = sprintf('%5s', $level); | ||
| 71 | |||||
| 72 | 33 | 142µs | 33 | 67µs | my $r = Dancer::SharedData->request; # spent 67µs making 33 calls to Dancer::SharedData::request, avg 2µs/call |
| 73 | 33 | 243µs | my @stack = caller(3); | ||
| 74 | |||||
| 75 | my $block_handler = sub { | ||||
| 76 | my ( $block, $type ) = @_; | ||||
| 77 | if ( $type eq 't' ) { | ||||
| 78 | return "[" . strftime( $block, localtime ) . "]"; | ||||
| 79 | } | ||||
| 80 | elsif ( $type eq 'h' ) { | ||||
| 81 | return '-' unless defined $r; | ||||
| 82 | return scalar $r->header($block) || '-'; | ||||
| 83 | } | ||||
| 84 | else { | ||||
| 85 | Carp::carp("{$block}$type not supported"); | ||||
| 86 | return "-"; | ||||
| 87 | } | ||||
| 88 | 33 | 239µs | }; | ||
| 89 | |||||
| 90 | my $chars_mapping = { | ||||
| 91 | h => sub { | ||||
| 92 | defined $r | ||||
| 93 | ? $r->env->{'HTTP_X_REAL_IP'} || $r->env->{'REMOTE_ADDR'} || '-' | ||||
| 94 | : '-'; | ||||
| 95 | }, | ||||
| 96 | t => sub { Encode::decode(setting('charset') || 'utf8', | ||||
| 97 | POSIX::strftime( "%d/%b/%Y %H:%M:%S", localtime )) }, | ||||
| 98 | T => sub { POSIX::strftime( "%Y-%m-%d %H:%M:%S", localtime ) }, | ||||
| 99 | u => sub { Encode::decode(setting('charset') || 'utf8', | ||||
| 100 | POSIX::strftime( "%d/%b/%Y %H:%M:%S", gmtime )) }, | ||||
| 101 | 33 | 1.22ms | 33 | 960µs | # spent 1.18ms (220µs+960µs) within Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:101] which was called 33 times, avg 36µs/call:
# 33 times (220µs+960µs) by Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:125] at line 124, avg 36µs/call # spent 960µs making 33 calls to POSIX::strftime, avg 29µs/call |
| 102 | 33 | 117µs | # spent 63µs within Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:102] which was called 33 times, avg 2µs/call:
# 33 times (63µs+0s) by Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:125] at line 124, avg 2µs/call | ||
| 103 | 33 | 63µs | # spent 30µs within Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:103] which was called 33 times, avg 906ns/call:
# 33 times (30µs+0s) by Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:125] at line 124, avg 906ns/call | ||
| 104 | D => sub { | ||||
| 105 | my $time = Dancer::SharedData->timer->tick; | ||||
| 106 | return $time; | ||||
| 107 | }, | ||||
| 108 | 33 | 77µs | # spent 44µs within Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:108] which was called 33 times, avg 1µs/call:
# 33 times (44µs+0s) by Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:125] at line 124, avg 1µs/call | ||
| 109 | f => sub { $stack[1] || '-' }, | ||||
| 110 | l => sub { $stack[2] || '-' }, | ||||
| 111 | i => sub { | ||||
| 112 | defined $r ? "[hit #" . $r->id . "]" : ""; | ||||
| 113 | }, | ||||
| 114 | 33 | 1.12ms | }; | ||
| 115 | |||||
| 116 | # spent 1.78ms (458µs+1.32) within Dancer::Logger::Abstract::__ANON__[/appl/netdisco/perl5/lib/perl5/Dancer/Logger/Abstract.pm:125] which was called 132 times, avg 13µs/call:
# 132 times (458µs+1.32ms) by Dancer::Logger::Abstract::format_message at line 129, avg 13µs/call | ||||
| 117 | 132 | 47µs | my $char = shift; | ||
| 118 | |||||
| 119 | 132 | 44µs | my $cb = $chars_mapping->{$char}; | ||
| 120 | 132 | 15µs | unless ($cb) { | ||
| 121 | Carp::carp "\%$char not supported."; | ||||
| 122 | return "-"; | ||||
| 123 | } | ||||
| 124 | 132 | 284µs | 132 | 1.32ms | $cb->($char); # spent 1.18ms making 33 calls to Dancer::Logger::Abstract::__ANON__[Dancer/Logger/Abstract.pm:101], avg 36µs/call
# spent 63µs making 33 calls to Dancer::Logger::Abstract::__ANON__[Dancer/Logger/Abstract.pm:102], avg 2µs/call
# spent 44µs making 33 calls to Dancer::Logger::Abstract::__ANON__[Dancer/Logger/Abstract.pm:108], avg 1µs/call
# spent 30µs making 33 calls to Dancer::Logger::Abstract::__ANON__[Dancer/Logger/Abstract.pm:103], avg 906ns/call |
| 125 | 33 | 88µs | }; | ||
| 126 | |||||
| 127 | 33 | 114µs | 33 | 297µs | my $fmt = $self->_log_format(); # spent 297µs making 33 calls to Dancer::Logger::Abstract::_log_format, avg 9µs/call |
| 128 | |||||
| 129 | 165 | 770µs | 330 | 2.12ms | $fmt =~ s^ # spent 1.78ms making 132 calls to Dancer::Logger::Abstract::__ANON__[Dancer/Logger/Abstract.pm:125], avg 13µs/call
# spent 185µs making 165 calls to Dancer::Logger::Abstract::CORE:substcont, avg 1µs/call
# spent 155µs making 33 calls to Dancer::Logger::Abstract::CORE:subst, avg 5µs/call |
| 130 | (?: | ||||
| 131 | \%\{(.+?)\}([a-z])| | ||||
| 132 | \%([a-zA-Z]) | ||||
| 133 | ) | ||||
| 134 | ^ $1 ? $block_handler->($1, $2) : $char_mapping->($3) ^egx; | ||||
| 135 | |||||
| 136 | 33 | 735µs | return $fmt."\n"; | ||
| 137 | } | ||||
| 138 | |||||
| 139 | sub core { $_[0]->_should('core') and $_[0]->_log('core', $_[1]) } | ||||
| 140 | 33 | 300µs | 66 | 9.36ms | # spent 9.66ms (299µs+9.36) within Dancer::Logger::Abstract::debug which was called 33 times, avg 293µs/call:
# 33 times (299µs+9.36ms) by Dancer::Logger::debug at line 37 of Dancer/Logger.pm, avg 293µs/call # spent 8.69ms making 33 calls to Dancer::Logger::Console::_log, avg 263µs/call
# spent 671µs making 33 calls to Dancer::Logger::Abstract::_should, avg 20µs/call |
| 141 | sub info { $_[0]->_should('info') and $_[0]->_log('info', $_[1]) } | ||||
| 142 | sub warning { $_[0]->_should('warning') and $_[0]->_log('warning', $_[1]) } | ||||
| 143 | sub error { $_[0]->_should('error') and $_[0]->_log('error', $_[1]) } | ||||
| 144 | |||||
| 145 | 1; | ||||
| 146 | |||||
| 147 | __END__ | ||||
# spent 155µs within Dancer::Logger::Abstract::CORE:subst which was called 33 times, avg 5µs/call:
# 33 times (155µs+0s) by Dancer::Logger::Abstract::format_message at line 129, avg 5µs/call | |||||
# spent 185µs within Dancer::Logger::Abstract::CORE:substcont which was called 165 times, avg 1µs/call:
# 165 times (185µs+0s) by Dancer::Logger::Abstract::format_message at line 129, avg 1µs/call |