Skip to content

Commit b3bc2ce

Browse files
committed
Add package name capability to logger output
This also includes a few minor doc fixes, and some internal refactoring. This is @mikkoi's patch, extracted from PR #1761.
1 parent 8400ba3 commit b3bc2ce

1 file changed

Lines changed: 39 additions & 18 deletions

File tree

lib/Dancer2/Core/Role/Logger.pm

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ has log_format => (
4343
default => sub {'[%a:%P] %L @%T> %m in %f l. %l'},
4444
);
4545

46+
has caller_stack_size => (
47+
is => 'rw',
48+
isa => Int,
49+
default => sub { 9; },
50+
);
51+
4652
my $_levels = {
4753

4854
# levels < 0 are for core only
@@ -75,7 +81,6 @@ sub format_message {
7581
$message = Encode::encode( $self->auto_encoding_charset, $message )
7682
if $self->auto_encoding_charset;
7783

78-
my @stack = caller(8);
7984
my $request = $self->request;
8085
my $config = $self->config;
8186

@@ -93,22 +98,7 @@ sub format_message {
9398
}
9499
};
95100

96-
my $chars_mapping = {
97-
a => sub { $self->app_name },
98-
t => sub { POSIX::strftime( "%d/%b/%Y %H:%M:%S", localtime(time) ) },
99-
T => sub { POSIX::strftime( "%Y-%m-%d %H:%M:%S", localtime(time) ) },
100-
u => sub { POSIX::strftime( "%d/%b/%Y %H:%M:%S", gmtime(time) ) },
101-
U => sub { POSIX::strftime( "%Y-%m-%d %H:%M:%S", gmtime(time) ) },
102-
P => sub {$$},
103-
L => sub {$level},
104-
m => sub {$message},
105-
f => sub { $stack[1] || '-' },
106-
l => sub { $stack[2] || '-' },
107-
h => sub {
108-
( $request && ( $request->remote_host || $request->address ) ) || '-'
109-
},
110-
i => sub { ( $request && $request->id ) || '-' },
111-
};
101+
my $chars_mapping = $self->map_chars_to_subs($level, $message, );
112102

113103
my $char_mapping = sub {
114104
my $char = shift;
@@ -133,6 +123,29 @@ sub format_message {
133123
return $fmt . "\n";
134124
}
135125

126+
sub map_chars_to_subs {
127+
my ( $self, $level, $message, $caller_delta ) = @_;
128+
my @stack = caller($self->caller_stack_size + ($caller_delta // 0));
129+
my $request = $self->request;
130+
return {
131+
a => sub { $self->app_name },
132+
t => sub { POSIX::strftime( "%d/%b/%Y %H:%M:%S", localtime(time) ) },
133+
T => sub { POSIX::strftime( "%Y-%m-%d %H:%M:%S", localtime(time) ) },
134+
u => sub { POSIX::strftime( "%d/%b/%Y %H:%M:%S", gmtime(time) ) },
135+
U => sub { POSIX::strftime( "%Y-%m-%d %H:%M:%S", gmtime(time) ) },
136+
P => sub {$$},
137+
L => sub {$level},
138+
m => sub {$message},
139+
p => sub { $stack[0] || '-' }, # package
140+
f => sub { $stack[1] || '-' }, # filepath
141+
l => sub { $stack[2] || '-' }, # line number
142+
h => sub {
143+
( $request && ( $request->remote_host || $request->address ) ) || '-'
144+
},
145+
i => sub { ( $request && $request->id ) || '-' },
146+
};
147+
};
148+
136149
sub _serialize {
137150
my @vars = @_;
138151

@@ -226,6 +239,10 @@ Log messages as B<error>.
226239
227240
Provides a common message formatting.
228241
242+
=method map_chars_to_subs
243+
244+
Returns a hashref which has all the items needed for message formatting.
245+
229246
=attr auto_encoding_charset
230247
231248
Charset to use when writing a message.
@@ -282,9 +299,13 @@ timer
282299
283300
message
284301
302+
=item %p
303+
304+
package name that emits the message
305+
285306
=item %f
286307
287-
file name that emit the message
308+
file name that emits the message
288309
289310
=item %l
290311

0 commit comments

Comments
 (0)