原始显示
本着分享的精神, 给近一二年使用 Mojolicious 的经验分享给大家. 今天要分享的是怎么加强默认 Mojo 显示日志, 让我们更加好的排错, 默认显示的时候是下面这样:
[Mon Jun 9 18:40:06 2014] [debug] GET "/perldoc".
[Mon Jun 9 18:40:06 2014] [debug] Routing to a callback.
[Mon Jun 9 18:40:06 2014] [debug] Rendering inline template "0667de3944df7624273d6f814d01f4c9".
[Mon Jun 9 18:40:06 2014] [debug] Rendering inline template "4fcf2af99f1803a7a26c2e9b04430f8c".
[Mon Jun 9 18:40:06 2014] [debug] 200 OK (0.169724s, 5.892/s).改造
有时我非常想知道, 这行日志到底是谁, 在哪打印出来的, 现在来让我们来实现这个功能, 如果是 Mojolicious::Lite
if( app->log->is_level('debug') ) {
nowarnings 'redefine';
*Mojo::Log::_format = sub{
my($self, $level, @lines) = @_;
my@caller= caller(4);
my$caller= join' ', $caller[0], $caller[2];
return'['. localtime(time) . "][$level] [$caller] ". join("\n", @lines). "\n";
}
}如果是 Mojolicious 就给下列代码写到 startup 当中
if( $self->app->log->is_level('debug') ) {
nowarnings 'redefine';
*Mojo::Log::_format = sub{
my($self, $level, @lines) = @_;
my@caller= caller(4);
my$caller= join' ', $caller[0], $caller[2];
return'['. localtime(time) . "][$level] [$caller] ". join("\n", @lines). "\n";
}
}最终效果
这样日志会显示成
[Mon Jun 9 18:35:47 2014][debug] [Mojolicious 107] GET "/perldoc".
[Mon Jun 9 18:35:47 2014][debug] [Mojolicious::Routes 119] Routing to a callback.
[Mon Jun 9 18:35:48 2014][debug] [Mojolicious::Plugin::EPLRenderer 34] Rendering inline template "0667de3944df7624273d6f814d01f4c9".
[Mon Jun 9 18:35:48 2014][debug] [Mojolicious::Plugin::EPLRenderer 34] Rendering inline template "4fcf2af99f1803a7a26c2e9b04430f8c".
[Mon Jun 9 18:35:48 2014][debug] [Mojolicious::Controller 210] 200 OK (0.171894s, 5.818/s).象上面, 我们这样能清楚的知道是哪行, 那个函数打印了这个日志.