From bd7df5bd5e19650591ce093230b744256e489f6f Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Mon, 5 Oct 2015 12:35:37 -0400 Subject: [PATCH] LP 1502152: Improve marc_export warnings. Trap warnings from MARC libraries in marc_export so we can report the id of the record that triggered the warning. Use warn to print our warnings, instead of print STDERR. This includes the existing errors, trapped by eval, that were being printed to STDERR. Signed-off-by: Jason Stephenson --- Open-ILS/src/support-scripts/marc_export.in | 56 +++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/Open-ILS/src/support-scripts/marc_export.in b/Open-ILS/src/support-scripts/marc_export.in index 70a659f8e8..ef841e1bcb 100755 --- a/Open-ILS/src/support-scripts/marc_export.in +++ b/Open-ILS/src/support-scripts/marc_export.in @@ -419,13 +419,17 @@ sub next { if ($Marque::config->option_value('mfhd') && $self->{mfhds} && @{$self->{mfhds}}) { $r = shift(@{$self->{mfhds}}); eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from serial record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in serial record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in serial record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -437,13 +441,17 @@ sub next { $output = OpenSRF::Utils::JSON->perl2JSON($r); } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -510,21 +518,29 @@ sub next { } if ($Marque::config->option_value('format') eq 'XML') { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_xml_record; $output =~ s/^<\?.+?\?>$//mo; }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); return $self->next(); } } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from bibliographic record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_usmarc; }; if ($@) { - print STDERR "Error in bibliograpic record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in bibliograpic record " . $r->id() . ": $@"); return $self->next(); } } @@ -730,13 +746,17 @@ sub next { } else { my $marc; eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $marc = MARC::Record->new_from_xml($r->marc(), $Marque::config->option_value('encoding'), $Marque::config->option_value('format')); }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); import MARC::File::XML; # Reset SAX Parser. return $self->next(); } @@ -770,21 +790,29 @@ sub next { } if ($Marque::config->option_value('format') eq 'XML') { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_xml_record; $output =~ s/^<\?.+?\?>$//mo; }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); return $self->next(); } } else { eval { + local $SIG{__WARN__} = sub { + my $message = "Warning from authority record " . $r->id() . ": " + . shift; + warn($message); + }; $output = $marc->as_usmarc; }; if ($@) { - print STDERR "Error in authority record " . $r->id() . "\n"; - print STDERR "$@\n"; + warn("Error in authority record " . $r->id() . ": $@"); return $self->next(); } } -- 2.11.0