Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何限制DBIx::Error中的堆栈跟踪?_Perl_Exception_Error Handling_Dbi - Fatal编程技术网

Perl 如何限制DBIx::Error中的堆栈跟踪?

Perl 如何限制DBIx::Error中的堆栈跟踪?,perl,exception,error-handling,dbi,Perl,Exception,Error Handling,Dbi,Perl模块可以在PerlDBI中的HandleError中使用 我想知道是否有一个选项可以将一些参数传递给 深入到底层 . 那是因为我们用了一些 长字符串作为函数调用中的参数。如果我现在打电话给 DBIx::Error->stack\u trace方法,我们的日志正在爆炸 Devel::Stacktrace知道参数no_args和max_arg_length 非常适合我们的需要。但是,他们是如何深入研究的呢 StackTrace软件包 模块实际维护人员的电子邮件-abraxxa@cpan.or

Perl模块可以在Perl
DBI
中的
HandleError
中使用

我想知道是否有一个选项可以将一些参数传递给 深入到底层 . 那是因为我们用了一些 长字符串作为函数调用中的参数。如果我现在打电话给
DBIx::Error->stack\u trace
方法,我们的日志正在爆炸

Devel::Stacktrace
知道参数
no_args
max_arg_length
非常适合我们的需要。但是,他们是如何深入研究的呢 StackTrace软件包

模块实际维护人员的电子邮件-abraxxa@cpan.org-好像坏了

有没有人能提供一些有用的提示?

我的意思是:

#!/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");
}

DBIx::Error的作者看起来是:Michael Brown#dbic中的人也非常反应灵敏。它使用引擎盖下作为Trowable的一部分。有一些关于args的文档。由于所有这些都是角色,您最终能够将您想要的参数作为
stack\u trace\u args=>[no\u args=>1]
或类似于
DBIx::Error->new
。我已经联系了Michael Brown。他已将该模块的维护工作移交给Alexander Hartmaier。Alexanders的电子邮件似乎被破坏了。
DBIx::Error
使用了
MooseX::StrictConstructor
,所以我不能传递任何其他参数,对吗?或者我必须以哪种方式传递论点?