ControlFreak
view release on metacpan or search on metacpan
lib/ControlFreak/Logger.pm view on Meta::CPAN
package ControlFreak::Logger;
use strict;
use warnings;
use Carp;
use Log::Log4perl();
use Object::Tiny qw{ config_file };
use Params::Util qw{ _STRING };
use Try::Tiny;
our $CURRENT_SVC_PID;
Log::Log4perl::Layout::PatternLayout::add_global_cspec(
'S', sub { $ControlFreak::Logger::CURRENT_SVC_PID || "-" },
);
sub new {
my $class = shift;
my $logger = $class->SUPER::new(@_);
if (my $config_file = $logger->config_file) {
unless (-e $config_file) {
croak "cannot find '$config_file'";
}
Log::Log4perl->init($config_file);
}
else {
Log::Log4perl->init( $logger->default_config );
}
return $logger;
}
sub safe_reinit {
my $logger = shift;
unless ($logger->config_file) {
$logger->warn("Ignored USR1, running with file-less config");
return;
}
$logger->info("Reloading log config");
try {
Log::Log4perl->init($logger->config_file);
$logger->info("Log config reloaded");
}
catch {
## damn ugly
warn "reloading config failed";
use Log::Log4perl::Logger;
Log::Log4perl::Config->_init(undef, $Log::Log4perl::Config::OLD_CONFIG);
$logger->error("There is an error in my config. Aborting. ($_)");
};
}
sub default_config {
return \<<'EOFC';
log4perl.rootLogger=INFO, ALL
log4perl.appender.ALL=Log::Log4perl::Appender::File
log4perl.appender.ALL.filename=sub { $ENV{CFKD_HOME} . "/cfkd.log" }
log4perl.appender.ALL.mode=append
log4perl.appender.ALL.layout=PatternLayout
# %S = service pid
log4perl.appender.ALL.layout.ConversionPattern=%S %p %L %c - %m%n
EOFC
}
sub log_handle {
my $logger = shift;
Log::Log4perl->get_logger(@_);
}
( run in 0.996 second using v1.01-cache-2.11-cpan-39bf76dae61 )