attempt to get rid of some of the useless messages on program exit
[spider.git] / perl / DXDebug.pm
index bc53457fe1d62d4d61338e78a1026daca03bb10f..c44ba35920f5d049291a4021b78b845c1406a606 100644 (file)
@@ -11,62 +11,79 @@ package DXDebug;
 
 require Exporter;
 @ISA = qw(Exporter);
-@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist isdbg);
+@EXPORT = qw(dbg dbgadd dbgsub dbglist isdbg dbgclose);
+@EXPORT_OK = qw(dbg dbgadd dbgsub dbglist isdbg dbgclose);
 
 use strict;
-use vars qw(%dbglevel $dbgfh);
+use vars qw(%dbglevel $fp);
 
 use FileHandle;
 use DXUtil;
+use DXLog ();
+use Carp;
 
 %dbglevel = ();
-$dbgfh = "";
+$fp = DXLog::new('debug', 'dat', 'd');
 
-no strict 'refs';
+# add sig{__DIE__} handling
+if (!defined $DB::VERSION) {
+       $SIG{__WARN__} = $SIG{__DIE__} = sub { 
+               my $t = time; 
+               for (@_) {
+                       $fp->writeunix($t, "$t^$_"); 
+#                      print STDERR $_;
+               }
+       };
+}
 
-sub dbginit
+sub dbgclose
 {
-  my $fhname = shift;
-  $dbgfh = new FileHandle;
-  $dbgfh->open(">>$fhname") or die "can't open debug file '$fhname' $!";
-  $dbgfh->autoflush(1);
+       $SIG{__DIE__} = $SIG{__WARN__} = 'DEFAULT';
+       $fp->close();
 }
 
 sub dbg
 {
-  my $l = shift;
-  if ($dbglevel{$l}) {
-    print @_;
-       print $dbgfh atime, @_ if $dbgfh;
-  }
+       my $l = shift;
+       if ($dbglevel{$l}) {
+           my @in = @_;
+               my $t = time;
+               for (@in) {
+                   s/\n$//o;
+                       s/\a//og;   # beeps
+                       print "$_\n" if defined \*STDOUT;
+                       $fp->writeunix($t, "$t^$_");
+               }
+       }
 }
 
 sub dbgadd
 { 
-  my $entry;
-  
-  foreach $entry (@_) {
-    $dbglevel{$entry} = 1;
-  }
+       my $entry;
+       
+       foreach $entry (@_) {
+               $dbglevel{$entry} = 1;
+       }
 }
 
 sub dbgsub
 {
-  my $entry;
-
-  foreach $entry (@_) {
-    delete $dbglevel{entry};
-  }
+       my $entry;
+       
+       foreach $entry (@_) {
+               delete $dbglevel{$entry};
+       }
 }
 
 sub dbglist
 {
-  return keys (%dbglevel);
+       return keys (%dbglevel);
 }
 
 sub isdbg
 {
-  return $dbglevel{shift};
+       my $s = shift;
+       return $dbglevel{$s};
 }
 1;
 __END__