Hmm, OK. Here's my first try with Log::Dispatch . It fails : the final log file holds a mixed content of only one script and the end of the launcher logs . I will try with Log::Agent ("dispatch" seems aimed at the opposite, that is log one same things to different places, err ... ).
- t1.pl ( launches t2.pl and t3.pl , they all try to log to the same file ) :
#!perl
package MyProjectPackage ;
use strict ;
use warnings ;
use Win32::Process ;
my $MLIB ;
BEGIN {
$MLIB = "c:/zlr" ;
}
use lib ( $MLIB . "/lib/" , $MLIB . "/lib/Perl/" ) ;
use Log::Dispatch ;
use Log::Dispatch::File ;
my $dispatcher = Log::Dispatch->new ;
my $MSOFT = "c:/zlr/script/test" ;
my $call_hProcess = "" ;
my $call_Resultat = 0 ;
my $i = 0 ;
$dispatcher->add( Log::Dispatch::File->new(
name => 'MyProjectErrT1',
min_level => 'info',
filename => "$MSOFT/ErrGeneral.txt" ) );
$dispatcher->log( level => 'info',
message => 'Start of log' );
$call_Resultat = Win32::Process::Create($call_hProcess,
"c:/Perl/bin/Perl.exe",
"perl t2.pl",
0,
IDLE_PRIORITY_CLASS,
"." ) ;
$call_Resultat = Win32::Process::Create($call_hProcess,
"c:/Perl/bin/Perl.exe",
"perl t3.pl",
0,
IDLE_PRIORITY_CLASS,
"." ) ;
while ( $i < 20 ) {
sleep 10 ;
$dispatcher->log( level => 'info',
message => "Launcher : $i\n" );
$i++ ;
}
- Here's t2.pl , t3.pl is the same :
#!perl
# Pragmas
package MyProjectPackage ;
use strict ;
use warnings ;
use Win32::Process ;
my $MLIB ;
BEGIN {
$MLIB = "c:/zlr" ;
}
use lib ( $MLIB . "/lib/" , $MLIB . "/lib/Perl/" ) ;
use Log::Dispatch ;
use Log::Dispatch::File ;
my $dispatcher = Log::Dispatch->new ;
my $MSOFT = "c:/zlr/script/test" ;
my $call_hProcess = "" ;
my $call_Resultat = 0 ;
my $i = 0 ;
$dispatcher->add( Log::Dispatch::File->new(
name => 'MyProjectErrT2',
min_level => 'info',
filename => "$MSOFT/ErrGeneral.txt" ) );
$dispatcher->log( level => 'info',
message => 'Start of t2' );
while ( $i < 20 ) {
sleep 10 ;
$dispatcher->log( level => 'info',
message => "t2.pl : $i\n" );
$i++ ;
}
| [reply] [d/l] [select] |
ZlR
Sorry to hear that! I actually do not know personally any of those modules because my firm decided to use something homegrown (that I may unfortunately not provide to you). I know that e.g. Log::Log4perl is very complete and that you could ask the author (Mike Schilli <m@perlmeister.com>) questions in case you had problems with it. But on the other hand this module might be overkill for a relatively simple problem.
| [reply] |
You can try File::Log
With this package, differents process can log in the same file.
- t1.pl ( launches t2.pl and t3.pl ) :
use strict ;
use warnings ;
use Win32::Process ;
use File::Log;
my $call_hProcess = "" ;
my $call_Resultat = 0 ;
$call_Resultat = Win32::Process::Create($call_hProcess,
"c:/Perl/bin/Perl.exe",
"perl t2.pl",
0,
IDLE_PRIORITY_CLASS,
"." ) ;
$call_Resultat = Win32::Process::Create($call_hProcess,
"c:/Perl/bin/Perl.exe",
"perl t3.pl",
0,
IDLE_PRIORITY_CLASS,
"." ) ;
- Here's t2.pl , t3.pl
use strict ;
use warnings ;
use File::Log;
# Log INFORMATIONAL or worse to a file
my $log = File::Log->new({
debug => 4,
logFileName => 'app.log',
logFileMode => '>>',
dateTimeStamp => 0,
stderrRedirect => 0,
defaultFile => 1,
logFileDateTime => 0,
appName => 'MyApp',
PIDstamp => 1,
storeExpText => 0,
});
for ( my $i=0; $i <= 50; $i++ ) {
sleep 2 ;
$log->msg(4, "t2.pl : $i\n");
}
| [reply] [d/l] [select] |