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 )