package LIMS::Local::LogDispatch;
use Config::Auto;
use LIMS::Local::Utils;
use Log::Dispatch;
use Log::Dispatch::File;
use Log::Dispatch::Screen;
use Log::Dispatch::Email::MailSendmail;
use Data::Dumper;
require Exporter;
@EXPORT = qw(
log_dispatch
);
use strict;
sub log_dispatch {
my $self = shift;
if (! $self->stash->{log_dispatch} ) {
my $path_to_app_root = LIMS::Local::Utils::find_home; # warn "$_: $ENV{$_}\n" for sort keys %ENV;
# TODO: shouldn't need this, but $self->cfg->{log_dispatch} contains mysterious 'callbacks'
my $config = Config::Auto::parse($path_to_app_root.'/config/lims_log_dispatch.pl', format => 'perl');
# warn Dumper $config;
my $dispatcher = Log::Dispatch->new;
my $log_dispatch_mods =
$config->{log_dispatch}->{LOG_DISPATCH_MODULES}; # warn Dumper $log_dispatch_mods;
# $self->cfg->{log_dispatch}->{LOG_DISPATCH_MODULES}; # module key replace by callback !!
foreach my $entry (@$log_dispatch_mods) { # warn Dumper $entry;
my $module = $entry->{module};
my %args =
map { $_ => $entry->{$_} }
grep { $_ ne 'module' } # already used it for $module
keys %$entry; # warn Dumper \%args;
$dispatcher->add(
$module->new(%args),
);
}
$self->stash( log_dispatch => $dispatcher ); # warn Dumper $dispatcher;
}
return $self->stash->{log_dispatch};
}
1;