#!/usr/bin/env perl # # catalina-out-select - print selected lines from catalina.out # # $Id$ # Usage: e.g. catalina-out-select ERROR WARN /var/lib/tomcat7/logs/catalina.out use strict; use warnings; use Getopt::Std; my %opt; getopts( 'he:v:', \%opt ); HELP_MESSAGE() if $opt{h}; # sloppy: disregard argument order my @a_rx = grep { /^[A-Z]+$/ } @ARGV; @ARGV = grep { !/^[A-Z]+$/ } @ARGV; my $entry_start_tx = qr/^\d.+\d\s+([A-Z]{4,})/; # the start of an entry in catalina.log my ($a_rx) = @a_rx ? map { qr($_) } join( '|', @a_rx ) : undef; my $e_rx = defined( $opt{e} ) ? qr($opt{e}) : undef; my $v_rx = defined( $opt{v} ) ? qr($opt{v}) : undef; doit(); exit(0); sub HELP_MESSAGE { print STDERR <) { if ( my ($nextlevel) = /$entry_start_tx/ ) { # the next entry starts here process_entry( $level, @entry ) if defined $level; @entry = ($_); $level = $nextlevel; } else { push( @entry, $_ ); } } process_entry( $level, @entry ); } sub process_entry { my $level = shift(@_); my $entry = join( '', @_ ); return if defined($a_rx) && $level !~ /$a_rx/; return if defined($e_rx) && $entry !~ /$e_rx/; return if defined($v_rx) && $entry =~ /$v_rx/; print STDOUT $entry; }