package Log::Dispatch::Configurator::AppConfig; use strict; use vars qw($VERSION); $VERSION = '1.00'; use Log::Dispatch::Configurator; use base qw(Log::Dispatch::Configurator); use AppConfig; sub new { my($class, $file, $section) = @_; my $self = bless { section => ($section ? "${section}_" : '') }, $class; if(ref $file && $file->isa('AppConfig')){ $self->{config} = $file; }else{ $self->{file} = $file; } $self->parse_file; return $self; } sub parse_file { my $self = shift; my $section = $self->{section}; my $config; if($self->{config}){ $config = $self->{config}; } else{ $config = AppConfig->new({ CREATE => 1, GLOBAL => { ARGCOUNT => AppConfig::ARGCOUNT_ONE(), }, }); $config->file($self->{file}); } $config->define("${section}dispatchers" => { DEFAULT => '' }) unless $config->varlist("^${section}dispatchers\$"); $config->define("${section}format" => { DEFAULT => undef }) unless $config->varlist("^${section}format\$"); $self->{_config} = $config; } sub reload { my $self = shift; $self->parse_file; } sub _config { $_[0]->{_config} } sub get_attrs_global { my $self = shift; my $section = $self->{section}; return { format => scalar $self->_config->get("${section}format"), dispatchers => [ split /\s+/, $self->_config->get("${section}dispatchers") ], }; } sub get_attrs { my($self, $name) = @_; my $section = $self->{section}; my $regex = "^$section$name" . '[\._]'; my %var = $self->_config->varlist($regex); my %param = map { (my $key = $_) =~ s/$regex//; $key => $var{$_}; } keys %var; return \%param; } 1; __END__ =head1 NAME Log::Dispatch::Configurator::AppConfig - Configurator implementation with AppConfig =head1 SYNOPSIS use Log::Dispatch::Config; use Log::Dispatch::Configurator::AppConfig; my $config = Log::Dispatch::Configurator::AppConfig->new('log.cfg'); Log::Dispatch::Config->configure($config); # nearby piece of code my $log = Log::Dispatch::Config->instance; =head1 DESCRIPTION Log::Dispatch::Configurator::AppConfig is an implementation of Log::Dispatch::Configurator using AppConfig format. Here is a sample of config file. dispatchers = file screen file.class = Log::Dispatch::File file.min_level = debug file.filename = /path/to/log file.mode = append file.format = [%d] [%p] %m at %F line %L%n screen.class = Log::Dispatch::Screen screen.min_level = info screen.stderr = 1 screen.format = %m You can use ini style grouping. [file] class = Log::Dispatch::File min_level = debug [screen] class = Log::Dispatch::Screen min_level = info If you use _ (underscore) in dispatcher name, something very B may happen. It is safe when you avoid doing so. =head1 AUTHOR Tatsuhiko Miyagawa Emiyagawa@bulknews.netE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L =cut