]> git.donarmstrong.com Git - infobot.git/blobdiff - src/logger.pl
&status() changes. removed loggingstatus in favour of fileno().
[infobot.git] / src / logger.pl
index 6d0ec1cce038363f4239d064ae65e7aa673e219f..2f9f945429517a669528198076ec505ede10fef0 100644 (file)
@@ -8,7 +8,7 @@
 
 use strict;
 
-use vars qw($logDate $loggingstatus $statcount $bot_pid
+use vars qw($logDate $statcount $bot_pid $forkedtime
            $statcountfix $addressed $logcount $logtime);
 use vars qw(@backlog);
 use vars qw(%param %file);
@@ -16,6 +16,7 @@ use vars qw(%param %file);
 require 5.001;
 
 $logtime       = time();
+$logcount      = 0;
 
 my %attributes = (
        'clear'      => 0,
@@ -73,6 +74,20 @@ sub openLog {
     return unless (&IsParam("logfile"));
     $file{log} = $param{'logfile'};
 
+    my $error = 0;
+    my $path = &getPath($file{log});
+    while (! -d $path) {
+       if ($error) {
+           &ERROR("openLog: failed opening log to $file{log}; disabling.");
+           delete $param{'logfile'};
+           return;
+       }
+
+       &status("openLog: making $path.");
+       last if (mkdir $path, 0755);
+       $error++;
+    }
+
     if (&IsParam("logType") and $param{'logType'} =~ /DAILY/i) {
        my ($day,$month,$year) = (localtime(time()))[3,4,5];
        $logDate = sprintf("%04d%02d%02d",$year+1900,$month+1,$day);
@@ -82,19 +97,16 @@ sub openLog {
     if (open(LOG, ">>$file{log}")) {
        &status("Opened logfile $file{log}.");
        LOG->autoflush(1);
-       $loggingstatus = 1;
     } else {
-       &status("cannot open logfile $file{log}; disabling.");
-       $loggingstatus = 0;
+       &status("cannot open logfile $file{log}; not logging.");
     }
 }
 
 sub closeLog {
     # lame fix for paramlogfile.
     return unless (&IsParam("logfile"));
-    return unless ($loggingstatus);
+    return unless (defined fileno LOG);
 
-    $loggingstatus = 0;
     &status("Closed logfile ($file{log}).");
     close LOG;
 }
@@ -147,6 +159,8 @@ sub ERROR {
 sub WARN {
     return unless (&IsParam("WARN"));
 
+    return if ($_[0] =~ /^PERL: Subroutine \S+ redefined at/);
+
     &status("${b_yellow}!WARN!$ob $_[0]");
 }
 
@@ -172,8 +186,20 @@ sub status {
     my($input) = @_;
     my $status;
 
-    # return if input is null'ish.
-    return '' if ($input =~ /^\s*$/);
+    # if it's not a scalar, attempt to warn and fix.
+    if (ref($input) ne "") {
+       &status("status: 'input' is not scalar (".ref($input).").");
+       if (ref($input) eq "ARRAY") {
+           foreach (@$input) {
+               &WARN("status: '$_'.");
+           }
+       }
+    }
+
+    # Something is using this w/ NULL.
+    if (!defined $input or $input =~ /^\s*$/) {
+       $input = "Blank status call?";
+    }
     $input =~ s/\n+$//;
     $input =~ s/\002|037//g;   # bold,video,underline => remove.
 
@@ -211,6 +237,7 @@ sub status {
        $status = "!$statcount! ".$input;
        if ($statcount > 1000) {
            print LOG "ERROR: FORKED PROCESS RAN AWAY; KILLING.\n";
+           print LOG "VERB: ".(&Time2String(time() - $forkedtime))."\n";
            exit 0;
        }
     } else {
@@ -271,7 +298,7 @@ sub status {
 
     # log the line into a file.
     return unless (&IsParam("logfile"));
-    return unless ($loggingstatus);
+    return unless (defined fileno LOG);
 
     # remove control characters from logging.
     $input =~ s/\e\[[0-9;]+m//g;
@@ -296,4 +323,21 @@ sub status {
     print LOG sprintf("%s %s\n", $date, $input);
 }
 
+sub openSQLDebug {
+    if (!open(SQLDEBUG, ">>$param{'SQLDebug'}")) {
+       &ERROR("cannot open $param{'SQLDebug'}...");
+       delete $param{'SQLDebug'};
+       return 0;
+    }
+
+    &status("Opened SQL Debug file: $param{'SQLDebug'}");
+    return 1;
+}
+
+sub closeSQLDebug {
+    close SQLDEBUG;
+
+    &status("Closed SQL Debug file: $param{'SQLDebug'}");
+}
+
 1;