在Mojo :: Log中记录IP地址,事务ID或会话ID

时间:2014-06-08 09:54:31

标签: perl mojolicious

我在mojolicious应用程序中使用简单的日志记录。我想通过一些信息来扩展日志记录。这可以是IP地址或事务ID或会话ID。 我之前做的是为每个日志级别写一个帮助器,如下所示:

$self->helper( 'info' => sub {
 my $self=shift;
 my $msg=shift;
 my $ip=$self->tx->remote_address;
 $self->app->log->info("[$ip] $msg");
});
...
$self->info("Login failed of user $user.");

我想修改日志记录输出的格式,这样我就可以使用泛型日志功能,它将添加我需要的任何额外值,并且每个日志级别都没有很多帮助程序。 基本要求:

$self->app->log->info("Login failed of user $user.");

还应该提供类似

的日志条目
[Sun Jun  8 11:09:12 2014] [info] [127.0.0.1] Login failed of user Tim.

我尝试通过更改日志格式来做,但我做的任何事情都会被忽略。

$self->app->log->format(sub {
 my ($time, $level, @lines) = @_;
 return "[$time] [$level] [$self->tx->remote_address] @lines.\n";
});

我知道Log4Perl与Mojolicious结合使用。但我希望尽可能保持简单。

1 个答案:

答案 0 :(得分:2)

使用Mojolicious :: Lite;

,我的速度非常快

要开始,请将日志转移到您可以快速找到的位置。

use Mojo::Log;
my $log = Mojo::Log->new(path => '~/log/mojo.log');

然后尝试这个,先将远程地址变量设置在sub之外。

# $r_ip = remote ip address
my $r_ip = $self->tx->remote_address;

$self->app->log->format(sub {
     my ($time, $level, @lines) = @_;
     return "[" . localtime(time) . "]  [$level] [$r_ip] . join("\n", @lines) . "\n";
 });

格式可见: http://mojolicio.us/perldoc/Mojo/Log