LP 1502152: Improve marc_export warnings. user/dyrcona/lp1502152_marc_export_warning_improvements
authorJason Stephenson <jstephenson@mvlc.org>
Mon, 5 Oct 2015 16:35:37 +0000 (12:35 -0400)
committerJason Stephenson <jstephenson@mvlc.org>
Mon, 5 Oct 2015 16:35:37 +0000 (12:35 -0400)
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 <jstephenson@mvlc.org>
Open-ILS/src/support-scripts/marc_export.in

index 70a659f..ef841e1 100755 (executable)
@@ -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();
                 }
             }