package Log::Log4perl::Config::Standalone;
use Log::Log4perl::Config;
use Log::Log4perl::Config::PropertyConfigurator;
use Carp;
sub new {
my ($class, $filename) = @_;
confess "configuration '$filename' not found\n" unless -f $filename;
my $cp = Log::Log4perl::Config::PropertyConfigurator->new;
$cp->file( $filename );
my $self = {
data => $cp->parse()
};
return bless $self, $class;
}
sub value {
my ($self, $path, $default) = @_;
my @p = split /\./, $path;
shift @p if $p[0] eq 'log4perl';
my $found = 1;
my $r = $self->{data};
while (my $n = shift @p) {
if (exists $r->{$n}) {
$r = $r->{$n};
}
else {
$found = 0;
}
}
return $found ? $r->{value} : $default;
}
1;
__END__
####
# filename: l4p.conf
global_var = /var/log/some/file.log
log4perl.rootLogger = DEBUG, LOGFILE
log4perl.appender.LOGFILE = Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename = ${global_var}
log4perl.appender.LOGFILE.mode = append
log4perl.appender.LOGFILE.layout = PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern = %d{ISO8601} [%P] %C %p %m%n
##
##
use Log::Log4perl::Config::Standalone;
my $c = Log::Log4perl::Config::Standalone->new('./l4p.conf');
print $c->value('log4perl.appender.LOGFILE.filename'), "\n";