http://www.perlmonks.org?node_id=1140869


in reply to Re: combine logentries with Log::log4perl
in thread combine logentries with Log::log4perl

sure, that's just a simplification but it shows
the same strange symptoms:

use Log::Log4perl qw(:easy); $conf = <<EOT; log4perl.rootLogger = DEBUG, Log1 log4perl.appender.Log1 = Log::Log4perl::Appender::File log4perl.appender.Log1.filename = /tmp/test.log log4perl.appender.Log1.mode = append log4perl.appender.Log1.layout = Log::Log4perl::Layout::SimpleLayout log4perl.appender.Log1.Threshold = INFO log4perl.logger = TRACE, Log2 log4perl.appender.Log2 = Log::Log4perl::Appender::ScreenColoredLevels log4perl.appender.Log2.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Log2.layout.ConversionPattern = %m%n log4perl.category = DEBUG, Buffer log4perl.appender.Buffer = Log::Log4perl::Appender::Buffer log4perl.appender.Buffer.appender = Log1 log4perl.appender.Buffer.trigger_level = ERROR EOT Log::Log4perl->init(\$conf); TRACE("message #1 (screen only)"); INFO("message #2"); INFO("message #3"); sleep(10); ERROR("message #4");

when i run this, i get on screen:

message #2 message #3 message #4

and in the file:

INFO - message #2 INFO - message #3 INFO - message #2 INFO - message #3 ERROR - message #4 ERROR - message #4

the first two lines of the log file appear at the same time like the ones on the screen. the first line (message #1) to the screen appender just disappears but in the log file message #2, #3 & #4 get doubled when the ERROR trigger got hit.

very odd behaviour. didn't match my expectations.

greetings

Replies are listed 'Best First'.
Re^3: combine logentries with Log::log4perl
by SimonPratt (Friar) on Sep 03, 2015 at 12:03 UTC

    You appear to be attempting to log to multiple places, hence all the double ups (and probably the cause of stuff not appearing on screen as expected). Try this:

    use strict; use warnings; use Log::Log4perl qw(:easy); my $conf = <<EOT; log4perl.rootLogger = DEBUG, Log1 log4perl.appender.Log1 = Log::Log4perl::Appender::File log4perl.appender.Log1.filename = /tmp/test.log log4perl.appender.Log1.mode = append log4perl.appender.Log1.layout = Log::Log4perl::Layout::SimpleLayout log4perl.appender.Log1.Threshold = INFO log4perl.logger = TRACE, Log2 log4perl.appender.Log2 = Log::Log4perl::Appender::ScreenColoredLevels log4perl.appender.Log2.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Log2.layout.ConversionPattern = %m%n log4perl.category = TRACE, Buffer log4perl.appender.Buffer = Log::Log4perl::Appender::Buffer log4perl.appender.Buffer.appender = Log1 log4perl.appender.Buffer.trigger_level = ERROR EOT Log::Log4perl->init(\$conf); TRACE("message #1 (screen only)"); INFO("message #2"); INFO("message #3"); sleep(10); ERROR("message #4");

    EDIT: You've set the buffer to intercept all messages and only allow DEBUG and higher through. Thats why your onscreen TRACE message disappears. Still looking into the doubling up thing.

    Oh, and I've updated my source - This gets the screen to display correctly, but everything is still doubled in the file.

Re^3: combine logentries with Log::log4perl
by shadowsong (Pilgrim) on Sep 03, 2015 at 14:16 UTC

    Change this line

    log4perl.rootLogger = DEBUG, Log1

    To this:

    log4perl.rootLogger = DEBUG, Buffer

    And... you can remove this line if you'd like the TRACE category to show up on STDOUT

    log4perl.category = DEBUG, Buffer

    Let us know if that matches your expectations? Although deep down I think you'll find you may have to write a custom composite function if you'd like to get a deeper level of customization..