# Logit.pm # John Simpson 1998-11-20 # # standard "logit" and "bad" functions for other programs to use # # 2002-05-14 jms1 - changed logit_syslog() to explicitly use "%s" format # with syslog() function # # 2005-04-09 jms1 - changed copyright notice to indicate my intention # that this code is licensed under GPL version 2 only, rather than # GPL version 2 "or later". # ############################################################################### # # Copyright (C) 1998-2005 John Simpson. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2, as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # or visit http://www.gnu.org/licenses/gpl.txt # ############################################################################### package Logit ; require 5.003 ; use strict ; use Carp ; use Sys::Syslog ; ############################################################################### # # startup stuff use vars qw ( $progname $fac $pri_logit $pri_bad $showpid $badrv $debug $stdout $use_openlog ) ; BEGIN { use Exporter ; use vars qw ( $VERSION @ISA @EXPORT @EXPORT_OK ) ; $VERSION = 1.0 ; @ISA = qw ( Exporter ) ; @EXPORT = qw ( logit bad ) ; @EXPORT_OK = qw ( $progname $fac $pri_logit $pri_bad $showpid $badrv $debug $stdout $use_openlog ) ; ( $progname = $0 ) =~ s:^.*/:: ; $fac = "user" ; $pri_logit = "info" ; $pri_bad = "err" ; $showpid = 1 ; $badrv = 0 ; $debug = 0 ; $stdout = 0 ; $use_openlog = 1 ; } ############################################################################### # # logging function sub logit_logger($) { my ( $msg ) = $_[0] ; $msg =~ s/\n/ /g ; if ( $debug ) { print "logit(): \$progname=\"$progname\" " , "\$showpid=$showpid $fac=\"$fac\" " , "\$pri_logit=\"$pri_logit\"\n" ; } if ( $stdout ) { my ( $now ) = scalar localtime ; print $now , " logit $progname" ; $showpid && ( print "[$$]" ) ; print ": $msg\n" ; } else { my ( $cmd ) = "/usr/bin/logger -p $fac.$pri_logit" . " -t \'$progname\'" . " \'$msg\'" ; $cmd =~ /(.*)/ ; $cmd = $1 ; system $cmd ; } } sub logit_openlog($) { my ( $msg ) = $_[0] ; $msg =~ s/\n/ /g ; if ( $debug ) { print "logit(): \$progname=\"$progname\" " , "\$showpid=$showpid $fac=\"$fac\" " , "\$pri_logit=\"$pri_logit\"\n" ; } if ( $stdout ) { my ( $now ) = scalar localtime ; print $now , " logit $progname" ; $showpid && ( print "[$$]" ) ; print ": $msg\n" ; } else { Sys::Syslog::setlogsock ( "unix" ) ; openlog ( $progname , $showpid ? "pid" : "" , $fac ) ; syslog ( $pri_logit , "%s" , $msg ) ; closelog ; } } sub logit($) { if ( $use_openlog ) { logit_openlog ( $_[0] ) ; } else { logit_logger ( $_[0] ) ; } } ############################################################################### # # error handler sub bad_logger($;$) { my ( $msg ) = $_[0] ; $msg =~ s/\n/ /g ; if ( $debug ) { print "bad(): \$progname=\"$progname\" " , "\$showpid=$showpid $fac=\"$fac\" " , "\$pri_bad=\"$pri_bad\"\n" ; } if ( $stdout ) { my ( $now ) = scalar localtime ; print $now , " bad $progname" ; $showpid && ( print "[$$]" ) ; print ": $msg\n" ; } else { my ( $cmd ) = "/usr/bin/logger -p $fac.$pri_bad" . " -t \'$progname\'" . " \'$msg\'" ; $cmd =~ /(.*)/ ; $cmd = $1 ; system $cmd ; } exit ( $_[1] || $badrv ) ; } sub bad_openlog($;$) { my ( $msg ) = $_[0] ; $msg =~ s/\n/ /g ; if ( $debug ) { print "bad(): \$progname=\"$progname\" " , "\$showpid=$showpid $fac=\"$fac\" " , "\$pri_bad=\"$pri_bad\"\n" ; } if ( $stdout ) { my ( $now ) = scalar localtime ; print $now , " bad $progname" ; $showpid && ( print "[$$]" ) ; print ": $msg\n" ; } else { Sys::Syslog::setlogsock ( "unix" ) ; openlog ( $progname , $showpid ? "pid" : "" , $fac ) ; syslog ( $pri_bad , "%s" , $msg ) ; closelog ; } exit ( $_[1] || $badrv ) ; } sub bad($;$) { if ( $use_openlog ) { bad_openlog ( $_[0] , ( $_[1] || 0 ) ) ; } else { bad_logger ( $_[0] , ( $_[1] || 0 ) ) ; } } ############################################################################### # # make sure we can run 1 ;