Hi Mike.
According to the docs, it ought to have worked but it doesn't.
I've got a config like:
------ begin config ------
layout = %d{yyyy-MM-ddTHH:mm:ss} %P %p %c %H %m%n
# Assign various things to various appenders
log4perl.rootlogger = TRACE, FILE, SCREEN
log4perl.logger.deactivated = OFF, SCREENDEBUG
# Log everything to a file
log4perl.appender.FILE = Log::Log4perl::Appender::File
log4perl.appender.FILE.filename = sub { main::get_log_name(); }
log4perl.appender.FILE.mode = clobber
log4perl.appender.FILE.Threshold = TRACE
log4perl.appender.FILE.layout =
Log::Log4perl::Layout::PatternLayout
log4perl.appender.FILE.layout.ConversionPattern = FILE ${layout}
log4perl.appender.SCREEN = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.Threshold = ERROR
log4perl.appender.SCREEN.layout =
Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern = SCREEN ${layout}
log4perl.appender.SCREENDEBUG =
Log::Log4perl::Appender::ScreenColoredLevels
log4perl.appender.SCREENDEBUG.layout =
Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREENDEBUG.layout.ConversionPattern = SCREENDEBUG
${layout}
------ end ------
The code looks like:
------ begin code ------
Log::Log4perl::init_and_watch($CONFIG_FILE, 10);
my $logger = Log::Log4perl->get_logger();
if ( $screen eq 'SCREENDEBUG' ) {
my $app = Log::Log4perl->appender_by_name('SCREENDEBUG');
$logger->add_appender($app);
eval {
$app = Log::Log4perl->appender_by_name('SCREEN');
Log::Log4perl::Logger->get_root_logger()->remove_appender($app);
};
if ($@) { warn("can't remove SCREEN appender: $@"); }
}
The first part (adding SCREENDEBUG workd; the second doesn't. The error
I get is:
can't remove SCREEN appender: No such appender:
Log::Log4perl::Appender::Screen=HASH(0x843cf28) at
//ms/dist/perl5/PROJ/Log-Log4perl/1.13/lib/perl5/Log/Log4perl/Logger.pm
line 607.
Which is strange as, running under the debugger, I can see both
appenders listed in the root logger. Any ideas?
------ end ------
Thomas Erskine
Consultant | Technology
2000 Barrington St | Suite 300 | Floor 04
Halifax, NS B3J3K1
Phone: +1 902 442-4709
[EMAIL PROTECTED]
> -----Original Message-----
> From: Erskine, Thomas (IT)
> Sent: Thursday, October 30, 2008 12:03 PM
> To: 'Mike Schilli'
> Cc: [email protected]
> Subject: RE: [log4perl-devel] activating appenders
>
> Hi Mike.
>
> I want to have the appender defined in the configuration for
> doccumentation and because having log configuration external
> to the program is (at least) half the point of a logging system IMHO.
>
> The problem with setting a threshold on the appender to cause
> it not ot log is that I don't see a way to programmatically
> set the threshold to a specific level. It can be bumped up
> or down, but that requires the program to know where the
> threshold was set in the configuration. I.E. configuration
> in the program, which I'm trying to avoid.
>
> The best I've been able to come up with is to define a logger
> with a threshold which won't log, call it deactivated, and
> assign this appender to it. Then to activate this appender,
> I can use appender_by_name(...) and
> get_root_logger()->add_appender(...). It took me a while to
> find it as get_root_logger is only defined on
> Log::Log4perl::Logger, not in Log::Log4perl.
>
> Thomas Erskine
> Consultant | Technology
> 2000 Barrington St | Suite 300 | Floor 04 Halifax, NS B3J3K1
> Phone: +1 902 442-4709
> [EMAIL PROTECTED]
>
>
> > -----Original Message-----
> > From: Mike Schilli [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, October 29, 2008 5:29 PM
> > To: Erskine, Thomas (IT)
> > Cc: [email protected]
> > Subject: Re: [log4perl-devel] activating appenders
> >
> > On Wed, 29 Oct 2008, Erskine, Thomas (IT) wrote:
> >
> > > I want to be able to define an appender in the log4perl
> > config file,
> > > but not activated and then activate it programmatically However,
> > > Log::Log4perl->appender_by_name('SCREENDEBUG') returns undef.
> > >
> > > I guess I could add SCREENDEBUG to the log4perl.logger line
> > and define
> > > it with a threshold which won't log anything and then bump the
> > > threshold up at runtime, but it seems wrong somehow.
> >
> > An appender that's not assigned to any logger in the
> configuration is
> > ignored by Log4perl at this point -- I think that using a
> threshold,
> > as you've suggested, is a perfectly valid solution, though.
> >
> > Alternatively, you can define the appender programmatically
> and add it
> > to the logger via add_appender().
> >
> > -- Mike
> >
> > Mike Schilli
> > [EMAIL PROTECTED]
> >
--------------------------------------------------------
NOTICE: If received in error, please destroy and notify sender. Sender does not
intend to waive confidentiality or privilege. Use of this email is prohibited
when received in error.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
log4perl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/log4perl-devel