2012-02-28 39 views
2

我最近注意到,我预先__PACKAGE__和子/方法名称大多数croak()的消息,因为它使追踪错误更容易。所以我开始编写一个_croak()包装器,默认添加这个(使用caller(1))。寻找一个更清晰的鲤鱼:: croak()

E.g.

sub _croak { 
    my ($msg) = shift // ''; 
    $msg = (caller 1)[3].': '.$msg 
     unless ref $msg; 
    Carp::croak($msg); 
}; 

现在每天(文本)异常是由于既在我的模块被滥用的地步(例如传递错误的参数),到模块本身。

而问题:有没有一个标准的模块/技术呢? (全栈跟踪aka承认()大部分时间是矫枉过正的)。

回答

2

标准技术是保持生成简单的异常,并在需要时通过从命令行加载Carp::Always::Color将它们转换为堆栈跟踪。

3

而不是让croak添加来电者信息,我让我的记录器做它。 Log4perl我们来设置我所关注的消息的格式。 croak完成它的工作,并且记录器让我窥视发生了什么。