MT#7705 - add "$data" argument into log methods to manually pass data if required. remove trailing whitespaces

agranig/webphone
Kirill Solomko 11 years ago
parent a016298e87
commit a90de685e9

@ -7,7 +7,7 @@ use DateTime qw();
use DateTime::Format::RFC3339 qw(); use DateTime::Format::RFC3339 qw();
use Time::HiRes qw(); use Time::HiRes qw();
method get_log_params ($self: Catalyst :$c) { method get_log_params ($self: Catalyst :$c, :$data?) {
# get log_tx_id, caller method, remote user, formatted passed parameters # get log_tx_id, caller method, remote user, formatted passed parameters
# tx_id # tx_id
@ -17,7 +17,7 @@ method get_log_params ($self: Catalyst :$c) {
# package and method # package and method
my $caller = (caller 2)[3]; my $caller = (caller 2)[3];
$caller !~ /::/ and $caller = (caller 3)[3]; $caller !~ /::/ and $caller = (caller 3)[3];
my $called = ''; my $called = '';
if ($caller) { if ($caller) {
my @caller = split('::', $caller); my @caller = split('::', $caller);
$#caller >= 3 and $called = join('::', @caller[-3...-1]); $#caller >= 3 and $called = join('::', @caller[-3...-1]);
@ -36,11 +36,11 @@ method get_log_params ($self: Catalyst :$c) {
$r_ip =~ s/^::ffff://; # ipv4 in ipv6 form -> ipv4 $r_ip =~ s/^::ffff://; # ipv4 in ipv6 form -> ipv4
# parameters # parameters
my $data = Data::Dumper->new([$c->request->parameters]) my $data_str = Data::Dumper->new([ $data ? $data : $c->request->parameters ])
->Terse(1) ->Terse(1)
->Dump; ->Dump;
$data =~ s/\n//g; $data_str =~ s/\n//g;
$data =~ s/\s+/ /g; $data_str =~ s/\s+/ /g;
unless ($c->config->{logging}->{clear_passwords}) { unless ($c->config->{logging}->{clear_passwords}) {
} }
@ -50,45 +50,45 @@ method get_log_params ($self: Catalyst :$c) {
called => $called, called => $called,
r_user => $r_user, r_user => $r_user,
r_ip => $r_ip, r_ip => $r_ip,
data => $data, data => $data_str,
}; };
} }
method error ($self: Catalyst :$c, Str :$desc, Str :$log?, :$error?) { method error ($self: Catalyst :$c, Str :$desc, Str :$log?, :$error?, :$data?) {
# we explicitly declare the invocant to skip the validation for Object # we explicitly declare the invocant to skip the validation for Object
# because we want a class method instead of an object method # because we want a class method instead of an object method
my $log_params = $self->get_log_params(c => $c); my $log_params = $self->get_log_params(c => $c, data => $data);
my $log_msg = ''; my $log_msg = '';
my $usr_type = 'error'; my $usr_type = 'error';
my $usr_text = $desc; my $usr_text = $desc;
given (1) { given (1) {
when (defined $log) when (defined $log)
{ {
$log_msg = $log $log_msg = $log
} }
when (not defined $error) when (not defined $error)
{ {
$log_msg = $desc; $log_msg = $desc;
} }
when (my ($host) = $error =~ /problem connecting to (\S+, port [0-9]+)/ ) when (my ($host) = $error =~ /problem connecting to (\S+, port [0-9]+)/ )
{ {
$log_msg = "$desc ($error)"; $log_msg = "$desc ($error)";
$usr_text = "$desc (A service could not be reached, $host)"; $usr_text = "$desc (A service could not be reached, $host)";
} }
when (ref($error) eq "ARRAY" && @$error >= 2 && $error->[1] eq "showdetails" ) when (ref($error) eq "ARRAY" && @$error >= 2 && $error->[1] eq "showdetails" )
{ {
$log_msg = "$desc (@$error[0])"; $log_msg = "$desc (@$error[0])";
$usr_text = "$desc (@$error[0])"; $usr_text = "$desc (@$error[0])";
} }
when (not $error->isa('DBIx::Class::Exception') ) when (not $error->isa('DBIx::Class::Exception') )
{ {
$log_msg = "$desc ($error)"; $log_msg = "$desc ($error)";
$usr_text = $desc; $usr_text = $desc;
} }
when (my ($dup) = $error =~ /(Duplicate entry \S*)/ ) when (my ($dup) = $error =~ /(Duplicate entry \S*)/ )
{ {
$log_msg = "$desc ($error)"; $log_msg = "$desc ($error)";
$usr_text = "$desc ($dup)"; $usr_text = "$desc ($dup)";
@ -101,36 +101,36 @@ method error ($self: Catalyst :$c, Str :$desc, Str :$log?, :$error?) {
$log_msg = "$desc ($error)"; $log_msg = "$desc ($error)";
} }
} }
$c->log->error( $c->log->error(
sprintf <<EOF, @{$log_params}{qw(r_ip called tx_id r_user data)}); sprintf <<EOF, @{$log_params}{qw(r_ip called tx_id r_user data)});
IP=%s CALLED=%s TX=%s USER=%s DATA=%s MSG=$log_msg IP=%s CALLED=%s TX=%s USER=%s DATA=%s MSG=$log_msg
EOF EOF
$c->flash(messages => [{ type => $usr_type, $c->flash(messages => [{ type => $usr_type,
text => sprintf '%s [%s]', text => sprintf '%s [%s]',
$usr_text, $usr_text,
$log_params->{tx_id}, $log_params->{tx_id},
}]); }]);
return; return;
} }
method info ($self: Catalyst :$c, Str :$desc, Str :$log?) { method info ($self: Catalyst :$c, Str :$desc, Str :$log?, :$data?) {
# we explicitly declare the invocant to skip the validation for Object # we explicitly declare the invocant to skip the validation for Object
# because we want a class method instead of an object method # because we want a class method instead of an object method
my $log_params = $self->get_log_params(c => $c); my $log_params = $self->get_log_params(c => $c, data => $data);
my $log_msg = ''; my $log_msg = '';
my $usr_type = 'info'; my $usr_type = 'info';
my $usr_text = $desc; my $usr_text = $desc;
given (1) { given (1) {
when (defined $log) when (defined $log)
{ {
$log_msg = $log $log_msg = $log
} }
default default
{ {
$log_msg = $desc; $log_msg = $desc;
} }
} }

Loading…
Cancel
Save