http://www.perlmonks.org?node_id=165234


in reply to duplicating STDERR to a logfile...

My favorite way to handle this is with Filter::Handle. For example:
use warnings; use strict; use Carp; use Filter::Handle qw/subs/; open (LOGFILE, ">logfile") or die "could not open logfile: $!"; #filter STDERR through an anonymous sub Filter \*STDERR, sub {local $_ = "@_"; print LOGFILE "Filtered: $_ "; +$_}; #need a signal handler to capture warnings from carp and warn which ar +e not captured by Filter::Handle (but by capturing ourselves and prin +ting to STDERR, they do get picked up by Filter::Handle) $SIG{__WARN__} = sub {local $_ = "@_"; print STDERR $_}; #prints to both STDERR and to LOGFILE print STDERR "error!\n"; carp "carp!"; warn "warn!"; #STDERR will no longer be filtered through your sub UnFilter \*STDERR; print STDERR "not captured to log\n"; warn "this one got away"; close LOGFILE;
Update: Added signal handler to capture output of warn and carp

Replies are listed 'Best First'.
Re: (RhetTbull) Re: duplicating STDERR to a logfile...
by cadphile (Beadle) on May 17, 2002 at 00:50 UTC
    Thanks RhetTbull -- This is the exact solution I was hunting for. Simple implementation, and it works just right.

    cheers

    Cadphile...