【问题标题】:How do I limit the stack trace in DBIx::Error?如何限制 DBIx::Error 中的堆栈跟踪?
【发布时间】:2017-08-13 03:44:01
【问题描述】:

Perl DBIx::Error 模块适用于 Perl DBI 中的 HandleError

我想知道是否有一个选项可以将一些参数传递给 DBIx::Error 下至底层 Devel::StackTrace。那是因为我们确实使用了一些 长字符串作为函数调用中的参数。如果我现在打电话给 DBIx::Error->stack_trace 方法,我们的日志正在爆炸。

Devel::Stacktrace 知道参数no_argsmax_arg_length 非常适合我们的需求。但他们是如何深入研究的 StackTrace 包?

模块的实际维护者的电子邮件 - abraxxa@cpan.org - 似乎已损坏。

有人提供有用的提示吗?

【问题讨论】:

  • DBIx::Error 作者看起来像:Michael Brown
  • #dbic 中的人也非常积极。
  • 它在底层使用 metacpan.org/pod/StackTrace::Auto 作为 Throwable 的一部分。那有一些关于参数的文档。由于所有这些都是角色,您最终可以将您想要的那些参数传递为stack_trace_args => [ no_args => 1 ] 或类似于DBIx::Error->new
  • 我已经联系了迈克尔·布朗。他已将该模块的维护工作交给了 Alexander Hartmaier。亚历山大的电子邮件似乎被破坏了。
  • DBIx::Error 使用MooseX::StrictConstructor,所以我不能传递任何其他参数,对吧?或者我必须以哪种方式传递参数?

标签: perl exception error-handling dbi


【解决方案1】:

这就是我的意思:

#!/usr/bin/perl 
use strict;
use warnings;
use DBI;
use DBIx::Error;
use TryCatch;

try {
    my $dbh = connectDatabase();
    doSomeThingWithDatabase($dbh, "i am a really long parameter and will not be shown complete in any logs");
} catch (DBIx::Error $e) {
    print "database error: " . $e->message . "\n"
        . "Trace: " . $e->stack_trace 
        . "\n";
}

sub connectDatabase {
    my $dbh = DBI->connect($dsn, $user, $pass);
    $dbh->{ShowErrorStatement} = 1;

    # V1: works, but shows the full parameter
    #$dbh->{HandleError} = DBIx::Error->HandleError;

    # V2: works, but the stack_trace_args parameter gets ignored
    $dbh->{HandleError} = DBIx::Error->HandleError(stack_trace_args => [no_args => 1]);

    # V3: Any suggestions ????


    return $dbh;
}

sub doSomeThingWithDatabase {
    my ($dbh, $reallyLongParameter) = @_; 
    $dbh->do("selec foo from bar");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多