[alt.sources] perl syslog compatibility package

tchrist@convex.com (Tom Christiansen) (02/10/90)

The following package, syslog.pl, uses /usr/ucb/logger to simulate
calls to BSD4.3's syslog(3).  I find it useful in sysadmin scripts.
It's a package because I needed file-local variables for storing the
'ident' and 'facility' fields initialized by openlog().  Entry points
are openlog(), syslog(), and closelog(); the last is basically a no-op
here for compatibility.


#
# syslog.pl
#
# tom christiansen <tchrist@convex.com>
#
# call syslog() with a string priority and a list of printf() args
# like syslog(3) but using logger(8)
#
#  usage: do 'syslog.pl' || die "syslog.pl: $@";
#
#  then (put these all in a script to test function)
#		
#
#	do openlog($program,'user');
#	do syslog('info','this is another test');
#	do syslog('warn','this is a better test: %d', time);
#	do closelog();
#	
#	do syslog('debug','this is the last test');
#	do syslog('notice','fooprogram: this is really done');
#
#	do openlog("$program $$",'user');
#
#	$! = 55;
#	do syslog('info','problem was %m'); # %m == $! in syslog(3)

package syslog;

$logpath = '/usr/ucb/logger';

die "syslog: can't call $logpath: $!" unless -x $logpath;

sub main'openlog {
    ($ident, $facility) = @_;  # package vars
} 

sub main'closelog {
    $facility = $ident = '';
} 
 
sub main'syslog {
    local($priority) = shift;
    local($mask) = shift;
    local($message, $whoami);

    $whoami = $ident;

    die "syslog: expected both priority and mask" unless $mask && $priority;

    $facility = "user" unless $facility;

    if (!$ident && $mask =~ /^(\S.*):\s?(.*)/) {
	$whoami = $1;
	$mask = $2;
    } 

    $mask =~ s/%m/$!/g;

    $message = sprintf ($mask, @_);

    $whoami = sprintf ("%s %d", $ENV{'USER'}, $$) unless $whoami;

    warn "logger returned $?" 
	if system $logpath, '-t', $whoami, 
			    '-p', "$facility.$priority", 
			    $message;
}

1;
--

    Tom Christiansen                       {uunet,uiucdcs,sun}!convex!tchrist 
    Convex Computer Corporation                            tchrist@convex.COM
		 "EMACS belongs in <sys/errno.h>: Editor too big!"