Perl DBIx::Error
模块非常适合在Perl HandleError
中的DBI
中使用。
我想知道是否可以将一些参数传递给
DBIx::Error
向下到底层
Devel::StackTrace
。那是因为我们确实使用了一些
长字符串作为函数调用中的参数。如果我现在打电话给DBIx::Error->stack_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");
}