On Thu, 2 Apr 2009, Ben Humphreys wrote:

> If anyone else is interested, I merged the data using Hash::Merge, and
> it seems to have the behaviour I was looking for.  Pretty concise too.

That's a great idea, Log4perl should really come with something like
this right out of the box!

-- Mike

Mike Schilli
m...@perlmeister.com

>
>
> use Data::Dumper;
> use Hash::Merge qw( merge );
> use Log::Log4perl::Config;
> use Log::Log4perl::Config::PropertyConfigurator;
>
> my $user_conf = Log::Log4perl::Config::PropertyConfigurator->new();
> $user_conf->file("s4:[bhumphreys.cube.exg.kosdaq]log.conf");
> my $user_data = $user_conf->parse(); # will die() on error
> print Dumper($user_data);
>
> my $def_conf = Log::Log4perl::Config::PropertyConfigurator->new();
> $def_conf->file("s4:[bhumphreys.cube_dev.lib]default_logger.conf");
> my $defaults = $def_conf->parse(); # will die() on error
> print Dumper($defaults);
>
> Hash::Merge::set_behavior( 'LEFT_PRECEDENT' );
> my %results = %{ merge( $user_data, $defaults ) };
>
> print Dumper(\%results);
>
>
>
>
>
> From:
> Mike Schilli <m...@perlmeister.com>
> To:
> Ben Humphreys <bhumphr...@factset.com>
> Cc:
> log4perl-devel@lists.sourceforge.net
> Date:
> 01/04/2009 01:41
> Subject:
> Re: [log4perl-devel] Multiple Config Files,     or Default Behaviour
> Workarounds?
>
>
>
> On Tue, 31 Mar 2009, Ben Humphreys wrote:
>
>> I want a default base set up for the logs, for formatting and levels
>> of explicit-ness, but I also want users to be able to override certain
>> parts of this behaviour with config files.
>> I can imagine doing the default behaviour in Perl, and then loading the
>> config file, but I'm not sure if that will trash all the default
> settings.
>> Or there is the string merge idea from the link above, but that seems a
>> little tricky.
>
> If you want to make sure that your settings have precedence, you need to
> load the user configuration file first and then make the corrections.
> The other way around, their configuration will override yours.
>
> One way to 'merge' two configurations to use the parse() method of the
> Log::Log4perl::Config::PropertyConfigurator class:
>
>     use Data::Dump qw(dump);
>     use Log::Log4perl::Config;
>     use Log::Log4perl::Config::PropertyConfigurator;
>         my $conf = Log::Log4perl::Config::PropertyConfigurator->new();
>         $conf->file("l4p.conf");
>         my $data = $conf->parse(); # will die() on error
>     print dump($data);
>
> After that (and note that parse() will die() if there's an error, so you
> might want to use an eval {} around it), $data will contain a data
> structure that you then can modify and merge with another one obtained
> from a second file.
>
> Once you have a satisfactory data structure in $data, you can pass it as
> the second (!) argument to Log4perl's init function:
>
>     Log::Log4perl->init( undef, $data );
>
> Highly undocumented feature ;).
>
> Hope that helps!
>
> -- Mike
>
> Mike Schilli
> m...@perlmeister.com
>
>
>

------------------------------------------------------------------------------
_______________________________________________
log4perl-devel mailing list
log4perl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/log4perl-devel

Reply via email to