Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

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 warn.pl

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

If you just run warn.pl you get

perl -w warn.pl Starting Program at warn.pl line 2. Hello World Ending Program at warn.pl 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( 'warn.pl' );# Your favorite system call here }; map{ ERROR $_ } split "\n", $errors;

If you save it as WarnCapture.pl and run that in the same folder as warn.pl you get

perl -w WarnCapture.pl Hello World 2012/09/14 16:34:20 Starting Program at C:\Scripts\warn.pl line 2. 2012/09/14 16:34:20 Ending Program at C:\Scripts\warn.pl 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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2014-08-31 01:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls