]> git.donarmstrong.com Git - infobot.git/blobdiff - blootbot/src/logger.pl
bzip2 moved
[infobot.git] / blootbot / src / logger.pl
index c7593a7ba064bf374fa87d15ca32ffb8b725fd67..0eaf0a8491239a8d144e32b66d50ddbccc22878e 100644 (file)
@@ -43,7 +43,7 @@ use vars qw($b_black $_black $b_red $_red $b_green $_green
            $b_yellow $_yellow $b_blue $_blue $b_magenta $_magenta
            $b_cyan $_cyan $b_white $_white $_reset $_bold $ob $b);
 
-$b_black       = cl('bold black');     $_black         = cl('black');
+$b_black       = cl('bold black');     $_black         = cl('black');
 $b_red         = cl('bold red');       $_red           = cl('red');
 $b_green       = cl('bold green');     $_green         = cl('green');
 $b_yellow      = cl('bold yellow');    $_yellow        = cl('yellow');
@@ -93,7 +93,7 @@ sub openLog {
     if (&IsParam("logType") and $param{'logType'} =~ /DAILY/i) {
        my ($day,$month,$year) = (gmtime time())[3,4,5];
        $logDate = sprintf("%04d%02d%02d",$year+1900,$month+1,$day);
-       $file{log} .= "-".$logDate;
+       $file{log} .= $logDate;
     }
 
     if (open(LOG, ">>$file{log}")) {
@@ -117,7 +117,7 @@ sub closeLog {
 # Usage: &compress($file);
 sub compress {
     my ($file) = @_;
-    my @compress = ("/usr/bin/bzip2","/bin/gzip");
+    my @compress = ('/usr/bin/bzip2','/bin/bzip2','/bin/gzip');
     my $okay = 0;
 
     if (! -f $file) {
@@ -187,26 +187,21 @@ sub status {
     my($input) = @_;
     my $status;
 
-    # a way to hook onto status without looping.
-    # todo: find why $channels{} is created.
-    if (0 and $running and !$cache{statusSafe}) {
-       &ircCheck();
+    if ($input =~ /PERL: Use of uninitialized/) {
+       &debug_perl($input);
+       return;
     }
 
     if ($input eq $logold) {
-       # allow perl flooding
-       if ($input !~ /PERL: Use of uninitialized/) {
-           $logrepeat++;
-           return;
-       }
-    } else {
-       $logold = $input;
+       $logrepeat++;
+       return;
+    }
 
-       # if only I had followed how sysklogd does it, heh. lame me. -xk
-       if ($logrepeat >= 3) {
-           &status("LOG: last message repeated $logrepeat times");
-           $logrepeat = 0;
-       }
+    $logold = $input;
+    # if only I had followed how sysklogd does it, heh. lame me. -xk
+    if ($logrepeat >= 3) {
+       &status("LOG: last message repeated $logrepeat times");
+       $logrepeat = 0;
     }
 
     # if it's not a scalar, attempt to warn and fix.
@@ -228,7 +223,7 @@ sub status {
 
     for ($input) {
        s/\n+$//;
-       s/\002|037//g;  # bold,video,underline => remove.
+       s/\002|\037//g; # bold,video,underline => remove.
     }
 
     # does this work?
@@ -371,6 +366,46 @@ sub status {
     printf LOG "%s %s\n", $date, $input;
 }
 
+sub debug_perl {
+    my ($str) = @_;
+
+    return unless ($str =~ /^WARN: Use of uninitialized value .* at (\S+) line (\d+)/);
+    my ($file,$line) = ($1,$2);
+    if (!open(IN,$file)) {
+       &status("WARN: cannot open $file: $!");
+       return;
+    }
+
+    # TODO: better filename.
+    open(OUT, ">>debug.log");
+    print OUT "DEBUG: $str\n";
+
+    # note: cannot call external functions because SIG{} does not allow us to.
+    my $i;
+    while (<IN>) {
+       chop;
+       $i++;
+       # bleh. this tries to duplicate status().
+       # TODO: statcountfix
+       # TODO: rename to log_*someshit*
+       if ($i == $line) {
+           my $msg = "$file: $i:!$_";
+           printf "%s[%6d]%s %s\n", $_green, $statcount, $ob, $msg;
+           print OUT "DEBUG: $msg\n";
+           $statcount++;
+           next;
+       }
+       if ($i+3 > $line && $i-3 < $line) {
+           my $msg = "$file: $i: $_";
+           printf "%s[%6d]%s %s\n", $_green, $statcount, $ob, $msg;
+           print OUT "DEBUG: $msg\n";
+           $statcount++;
+       }
+    }
+    close IN;
+    close OUT;
+}
+
 sub openSQLDebug {
     if (!open(SQLDEBUG, ">>$param{'SQLDebug'}")) {
        &ERROR("Cannot open ($param{'SQLDebug'}): $!");