Hi, me again. 

Attached is a patch to mon to redirect the syslog to a log file and/or
the syslog. 

-m
--- mon-0.99.3-31/mon   Mon May 19 14:26:35 2003
+++ mon/mon     Tue Jun 24 09:24:41 2003
@@ -43,7 +43,8 @@
 use Fcntl;
 use Socket;
 use Sys::Hostname;
-use Sys::Syslog qw(:DEFAULT);
+use Sys::Syslog qw();
+#use Sys::Syslog qw(:DEFAULT);
 use FileHandle;
 
 use Data::Dumper;
@@ -232,6 +233,11 @@
     Sys::Syslog::setlogsock ('unix');
 }
 
+# Default Logging to Syslog
+*openlog = \&Sys::Syslog::openlog;
+*closelog = \&Sys::Syslog::closelog;
+*syslog = \&Sys::Syslog::syslog;
+
 openlog ("mon", "cons,pid", $CF{"SYSLOG_FACILITY"});
 
 #
@@ -251,7 +257,20 @@
     syslog_die ("$err");
 }
 
-closelog;
+closelog();
+
+# Set log file type
+#
+# Added two new config file options : logfile,syslog
+#
+#   logfile : set to a filename (uses logdir) to syslog to a file and syslog
+#   syslog  : set to false if you only want to syslog to a file
+#
+if (defined $CF{LOGFILE}) {
+    *openlog  = \&log_openlog;
+    *closelog = \&log_closelog;
+    *syslog   = \&log_syslog;
+}
 
 openlog ("mon", "cons,pid", $CF{"SYSLOG_FACILITY"});
 
@@ -988,6 +1007,12 @@
            } elsif ($1 eq "syslog_facility") {
                $new_CF{"SYSLOG_FACILITY"} = $2;
 
+        } elsif ($1 eq "logfile") {
+            $new_CF{"LOGFILE"} = $2;
+
+        } elsif ($1 eq "syslog") {
+            $new_CF{"SYSLOG"} = $2;
+    
            } elsif ($1 eq "startupalerts_on_reset") {
                if ($2 =~ /^1|yes|true|on$/i) {
                    $new_CF{"STARTUPALERTS_ON_RESET"} = 1;
@@ -4853,6 +4878,39 @@
 
     syslog ("err", $msg);
     die "$msg\n";
+}
+
+sub log_openlog {
+    my ($log_prefix, $logopt, $facility) = @_;
+    my $logfile = $CF{LOGFILE};
+    my $logdir  = $CF{LOGDIR};
+
+    open (SYSLOG,"+>> $logdir/$logfile") or die "Can't open logfile $logdir/$logfile. 
$!\n";
+
+    unless (defined $CF{SYSLOG} and $CF{SYSLOG} =~ /^(false|0|no)$/){
+        Sys::Syslog::openlog(@_);
+    }
+}
+
+sub log_closelog {
+    close (SYSLOG) or die "Can't write SYSLOG. $!\n";
+    
+    unless (defined $CF{SYSLOG} and $CF{SYSLOG} =~ /^(false|0|no)$/){
+        Sys::Syslog::closelog(@_);
+    }
+}
+
+sub log_syslog {
+    unless (defined $CF{SYSLOG} and $CF{SYSLOG} =~ /^(false|0|no)$/){
+        Sys::Syslog::syslog(@_);
+    }
+    my ($priority,$format,@args) = @_;
+
+    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+    $year +=1900; $mon++;
+
+    # give max 7 spaces for priority type.
+    printf SYSLOG "%02d%02d%d %02d:%02d %-9s $format \n", 
$mon,$mday,$year,$hour,$min,"[$priority]",@args;
 }
 
 
_______________________________________________
mon mailing list
[EMAIL PROTECTED]
http://linux.kernel.org/mailman/listinfo/mon

Reply via email to