在魔::登录的IP地址,事务ID或会话ID的记录(Logging of ip address, tr

2019-11-03 05:36发布

我使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组合。 但我要保持它的简单越好。

Answer 1:

我这是怎么回事使用Mojolicious ::精简版相当快;

要开始了,转移日志在某处您可以快速找到。

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

那就试试这个,首先设置远程地址变量子之外。

# $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



Answer 2:

有一种可能的记录每个请求/响应的唯一ID? 绪Mojolicious邮件列表,其中塞巴斯蒂安/ SRI上 - Mojolicious的作者 - 答案:

答案很简单:你不能,Mojolicious是异步设计,可能有数以千计的在任何特定时间活跃的并发请求。

复杂的答案:如果你限制你的应用程序(通过服务器)来处理在同一时间只有一个请求,并且不使用任何实时网络功能(而不是它会多大意义,如果你不能处理的并发请求),你可以继承魔精::登录到自定义消息格式和存储全局唯一的ID为每一个新的请求。

其他(目前公认的)答案正是这么做的:它会删除所有的并发性和使用全局变量。 这将开始打破,当你开始使用实时Mojolicious功能。



文章来源: Logging of ip address, transaction id or session id in Mojo::Log