Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

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

by jandrew (Hermit)
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!

Comment on Re: How to capture child process output and divert to log4perl
Select or Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://993808]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (11)
As of 2016-02-09 21:57 GMT
Find Nodes?
    Voting Booth?

    How many photographs, souvenirs, artworks, trophies or other decorative objects are displayed in your home?

    Results (326 votes), past polls