@@ -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+
4652my $_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+
136149sub _serialize {
137150 my @vars = @_ ;
138151
@@ -226,6 +239,10 @@ Log messages as B<error>.
226239
227240Provides 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
231248Charset to use when writing a message.
@@ -282,9 +299,13 @@ timer
282299
283300message
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