#!/usr/bin/perl -w use threads; use threads::shared; use Log::Log4perl qw(get_logger :levels); Log::Log4perl->init_and_watch('/home/kg/log.conf', 'QUIT'); my $logger = get_logger(); $logger->level($INFO); my $thr1 = threads->create(\&thread1); my $thr2 = threads->create(\&thread2); my $thr3 = threads->create(\&thread3); $SIG{INT} = sub { my $sig = shift; my $tid = threads->tid(); print "Thread $tid received $sig\n"; foreach my $thr (threads->list()) { print "Sending QUIT to thread with tid ", $thr->tid, "\n"; $thr->kill('QUIT'); } }; print "PID: $$\n"; while () { sleep 10; my $date = `date`; chomp $date; print $date, ": I'm the main program\n"; } sub thread1 { while () { my $logger = get_logger(); $logger->info("I'm thread1"); sleep 10; } } sub thread2 { my $logger = get_logger(); while () { $logger->info("I'm thread2"); sleep 10; } } sub thread3 { my $logger = get_logger(); while () { $logger->info("I'm thread3"); sleep 10; } } #### ############################################################ # A simple root logger with a Log::Log4perl::Appender::File # file appender in Perl. ############################################################ log4perl.rootLogger=ERROR, LOGFILE log4perl.appender.LOGFILE=Log::Dispatch::File log4perl.appender.LOGFILE.filename=/home/kg/myerrs.log log4perl.appender.LOGFILE.mode=append log4perl.appender.LOGFILE.layout=PatternLayout log4perl.appender.LOGFILE.layout.ConversionPattern=%d - [%r] %F %L %c - %m%n