#! /bin/sh -e PROGRAM=lr_run tag="all all none $PROGRAM" if test $# -eq 0 then echo >&2 "$tag err give at least one arg, indicating program to run" exit 1 fi # dereference sysconfdir's prefix dependency prefix="@prefix@" etcdir="@sysconfdir@/@PACKAGE@" . $etcdir/profile_lean if eval `lr_environment 2> /dev/null` then : else # Retry without redirecting stderr eval `lr_environment` exit 1 fi # # Tom Christiansen in Csh Programming Considered Harmful # # exec 3>&1; grep yyy xxx 2>&1 1>&3 3>&- | sed s/file/foobar/ 1>&2 3>&- # exec 3>&1 "$@" 2>&1 1>&3 3>&- | { while read superservice service id program level rest do message="$superservice $service $id $program $level $rest" case $level in emerg|alert|crit|err|warning|notice) if test stderr = "$lr_logging_method" then echo >&2 "$message" else @LOGGER@ -p $lr_logging_facility.$level -t $lr_logging_tag "$message" fi ;; info|debug) if test -n "$lr_debug" then if test stderr = "$lr_logging_method" then echo >&2 "$message" else @LOGGER@ -p $lr_logging_facility.$level -t $lr_logging_tag "$message" fi fi ;; *) message="bogus message: $message" if test stderr = "$lr_logging_method" then echo >&2 "$message" else @LOGGER@ -p $lr_logging_facility.alert -t $lr_logging_tag "$message" fi ;; esac done } 1>&2 3>&- exit 0 POD=<<'EOPOD' =pod =head1 NAME lr_run - run a Lire program and deal with the logging output =head1 SYNOPSIS B I I =head1 DESCRIPTION B runs I, and redirects I's stderr output to logger(1). It parses I logging output, and sets logger(1)'s flags accordingly. B gets configuration from I/lire/defaults. In case 'lr_logging_method' is set to 'stderr', logger(1) is not involved: logging output gets redirected to stderr. In case 'lr_debug' is set to the empty string, messages with loglevel debug and info get suppressed. The configuration variable 'lr_logging_facility' is used to find logger(1)'s facility. =head1 NOTES I's output on stderr should be in format I I I I I I. I should be one of: emerg (system is unusable), alert (action must be taken immediately), crit (critical conditions), err (error conditions), warning (warning conditions), notice (normal, but significant, condition), info (informational message), debug (debug-level message). See syslog(3). I can be used to tag each Lire job, so that these can get tracked. I should be the name of the program which generated the log line. =head1 EXAMPLES To process a Postfix log and display the report as text, use $ lr_run lr_log2report postfix < /var/log/mail.log To process a Postfix log and create the report in HTML (packed up in a tar archive), use: $ lr_run lr_log2report -o html postfix < /var/log/mail.log > postfix.tar =head1 SEE ALSO Documentation in the Lire User Manual =head1 VERSION $Id: lr_run.in,v 1.23 2006/07/23 13:16:33 vanbaal Exp $ =head1 COPYRIGHT Copyright (C) 2000-2003 Stichting LogReport Foundation LogReport@LogReport.org This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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 (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html. =head1 THANKS Rudi Sluijtman, for sharing some thoughts on shell scripting. =head1 AUTHOR Joost van Baal =cut EOPOD