use strict; use warnings; use threads; use threads::shared; use Thread::Queue; use Log::Log4perl; my $logOptionsFile = q( log4perl.logger=DEBUG, Screen, File #This block prints to the Screen with a msg level of INFO and higher log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.layout=Log::Log4perl::Layout::PatternLayout log4perl.appender.Screen.layout.ConversionPattern = %-6p%12d{MM/dd HH:mm} %X{client} %m%n log4perl.appender.Screen.Threshold = DEBUG #This block prints to the Log file with a msg level of INFO and higher log4perl.appender.File=Log::Log4perl::Appender::FileRotate # log4perl.appender.File=Log::Log4perl::Appender::File log4perl.appender.File.filename=C:/Users/RAMAHIN/Documents/Perl/logTesting/logSWAP0.txt log4perl.appender.File.mode=append log4perl.appender.File.max_size = 200 log4perl.appender.File.layout=Log::Log4perl::Layout::PatternLayout log4perl.appender.File.layout.ConversionPattern = %-6p%12d{MM/dd HH:mm} %X{client} %m%n log4perl.appender.File.Threshold = DEBUG ); Log::Log4perl->init(\$logOptionsFile); my $logger = Log::Log4perl->get_logger(); Log::Log4perl::MDC->put("client", "MAIN"); $logger->info("Test Started"); my @threads; my $T //= shift || 10; my $R //= shift || 5; our $queue = Thread::Queue->new(); #create threads thats will dequeue work for(1..$T){ push @threads, async{ my $logger = Log::Log4perl->get_logger(); Log::Log4perl::MDC->put("client", threads->tid()); for my $i (1..$R){ if(my $msg = $queue->dequeue()){ $logger->debug("$i $msg"); } } }; } #Send messages for(1..($T*$R)){ $queue->enqueue("Hello World"); } $logger->info("Joining threads"); $_->join() for @threads; $logger->info("Test Ended");