performance - 保存日志/统计数据的最佳方式

标签 performance logging catalyst

我使用 Catalyst(Perl 的 MVC 框架),但这个问题可能适用于所有 MVC 框架。

到目前为止,我使用 Apache 日志文件来获取有关访问者的统计信息:用户代理、访问的 URL、时间等。但现在我转向了 MVC 框架,我认为这还不够。例如,如果对/1/foo 和/1/bar 的请求对我来说是相同的,我只想在我的日志中显示/1/。

所以我想知道生成自己的统计日志文件的最佳方法是什么。我应该将其视为应用程序中的另一个日志文件吗?

这些统计数据可以随时记录。理想情况下,它们会在页面发送给用户之后被记录,因此不会感觉到记录所需的额外时间。

最佳答案

鉴于 Catalyst 已经广泛使用子例程属性,一种有用的方法可能是使用属性将相关子例程包装在自定义日志记录机制中。我写了an article关于此技术,以日志记录为例。基本思想是:

use Attribute::Handlers;

sub Log : ATTR(CODE) {
    my ($pkg, $sym, $code) = @_;


    my $name = *{ $sym }{NAME};

    no warnings 'redefine';

    *{ $sym } = sub {
        log_message("Entering sub $pkg\:\:$name");
        $code->( @_ );
    };
}

sub foo : Log { 
    # this will be logged
}

关于performance - 保存日志/统计数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832983/

相关文章:

c# - 使用 log4net 时直接调用根记录器是一个好习惯吗?

perl - 如何在模板工具包中轻松创建表 View in perl/Catalyst

mysql - 有没有更有效的方法来运行多个 UPDATE sql 语句

performance - Apache Spark 连接操作的弱扩展性差

java - 什么是 spring MVC 中的调试日志记录

perl - 如何避免存储过多的 session ?

perl - 如何引入正则表达式操作以匹配 Catalyst URI 中的第一个元素?

Java - 寻找比 PriorityQueue 更快的东西

java - 替代 long 以避免斐波那契数列溢出

Php LDAP_OPT_DEBUG_LEVEL,7 不跟踪