取势 明道 优术

作者为 扶 凯 发表

原始显示

本着分享的精神, 给近一二年使用 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') ) { 
    no warnings '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') ) { 
    no warnings '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).

象上面, 我们这样能清楚的知道是哪行, 那个函数打印了这个日志.

来了就留个评论吧! 没有评论