Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: How to capture child process output and divert to log4perl

by jandrew (Chaplain)
on Sep 14, 2012 at 23:41 UTC ( #993808=note: print w/replies, xml ) Need Help??

in reply to How to capture child process output and divert to log4perl

I'm not sure this is what your looking for but Capture::Tiny seems to fit your requirements.

Per ww's post

With "system()", both STDOUT and STDERR will go the same place as the script's STDOUT and STDERR, unless the "system()" command redirects

As a test, save the following as

$| = 1;#flush the buffer warn "Starting Program"; print "Hello World\n"; warn "Ending Program";

If you just run you get

perl -w Starting Program at line 2. Hello World Ending Program at line 4.

But to do what you want you need to redirect just the STDERR. I offer the following code

use Log::Log4perl qw(:easy); Log::Log4perl->easy_init($ERROR); use Capture::Tiny 0.12 qw( capture_stderr ); my $errors = capture_stderr{ system( '' );# Your favorite system call here }; map{ ERROR $_ } split "\n", $errors;

If you save it as and run that in the same folder as you get

perl -w Hello World 2012/09/14 16:34:20 Starting Program at C:\Scripts\ line 2. 2012/09/14 16:34:20 Ending Program at C:\Scripts\ line 4.

Capture::Tiny to the rescue!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://993808]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (2)
As of 2018-05-21 01:30 GMT
Find Nodes?
    Voting Booth?