From: Mike S. <m...@pe...> - 2013-05-30 05:41:41
|
On Thu, 16 May 2013, Mark Horstmeier wrote: > Log4perl loads with level set to ERROR per conf. I want to set my > appender to DEBUG Threshold was not defined in the conf so it is set > to ALL I set the appender to DEBUG But still only the ERROR and FATAL > levels are output Looks like you're setting the appender's threshold when what you really want is setting the logger's level instead. Doesn't my $logger = Log::Log4perl::get_logger(''); # ... $logger->level( $DEBUG ); do what you have in mind? -- -- Mike Mike Schilli m...@pe... > A follow up question on thresholds I have a web app (application > engine) that returns different mime-types depending on the query. I > use a screen appender to embed the debug logs in the response (usually > javascript, because I often return javascript for the client browser > to execute). > > When I need to return JSON, the javascript debug > // <log4perl stuff> > > Blows up the JSON encoding. > > If I just use $logger->level(..) to keep the debug from leaking into my JSON > document, I lose the debug information that is written to my file appender. > > When I return javascript, embedding the debug in the javascript is very > helpful to the people apps for my application engine so they can debug the > creation of the javascript so I don't want to eliminate it. > > I have tried to change the threshold dynamically on just one appender, but > the log out put remains the same (I am testing this with just a file > appender for simplicity): > my $logger = Log::Log4perl::get_logger(''); > DEBUG("debug"); > INFO("info"); > WARN("warn"); > ERROR("error"); > FATAL("fatal"); > ... > my $appender = $Log::Log4perl::Logger::APPENDER_BY_NAME{$key}; > my $dthresh = $appender->threshold(); > $logger->error("Appender set to: ",Log::Log4perl::Level::to_level( > $dthresh )); > my $nthresh = $appender->threshold($DEBUG); > ... > $logger->error("Appender set to: ",Log::Log4perl::Level::to_level( > $n2thresh )); > $logger->debug("debug"); > $logger->info("info"); > $logger->warn("warn"); > $logger->error("error"); > $logger->fatal("fatal"); > > With my conf file: > log4perl.logger = ERROR, FileApp > > log4perl.appender.FileApp = Log::Log4perl::Appender::File > log4perl.appender.FileApp.filename = /web/logs/detail_log > log4perl.appender.FileApp.mode = append > log4perl.appender.FileApp.owner = web > log4perl.appender.FileApp.group = web > log4perl.appender.FileApp.utf8 = 1 > log4perl.appender.FileApp.layout = > Log::Log4perl::Layout::PatternLayout > log4perl.appender.FileApp.layout.ConversionPattern = \ > %r %X{eid} %p %F{1} %X{site} %X{rule} %m%n > > Apache gives me this: > 3 [undef] ERROR Configure.pm [undef] [undef] error > 4 [undef] FATAL Configure.pm [undef] [undef] fatal > 5 [undef] ERROR Configure.pm [undef] [undef] Appender set to: > ALL > > > 5 [undef] ERROR Configure.pm [undef] [undef] DEBUG FileApp > > > 6 [undef] ERROR Configure.pm [undef] [undef] Appender set to: > DEBUG > 6 [undef] ERROR Configure.pm [undef] [undef] error > 6 [undef] FATAL Configure.pm [undef] [undef] fatal > > ... > > I suppose that an alternative would be to apply a Buffer composite appender > and only creating the trigger condition if the response type is not JSON > > Should I be able to make this work via threshold or do I need to pursue an > alternative solution? > > |