App-EventStreamr
view release on metacpan or search on metacpan
lib/App/EventStreamr/Roles/Logger.pm view on Meta::CPAN
package App::EventStreamr::Roles::Logger;
use Log::Log4perl;
use Method::Signatures;
use Moo::Role;
# ABSTRACT: Logging for EventStreamr
our $VERSION = '0.5'; # VERSION: Generated by DZP::OurPkg:Version
my @methods = qw(
log trace debug info warn error fatal
is_trace is_debug is_info is_warn is_error is_fatal
logexit logwarn error_warn logdie error_die
logcarp logcluck logcroak logconfess
);
has _logger => (
is => 'ro',
isa => sub { 'Log::Log4perl::Logger' },
lazy => 1,
builder => 1,
handles => \@methods,
);
has _log_path => ( is => 'ro', lazy => 1, builder => 1 );
has _log_level => ( is => 'ro', lazy => 1, builder => 1 );
has log_config => ( is => 'ro', lazy => 1, builder => 1 );
method _build_log_config() {
my $log_level = $self->_log_level || "INFO, LOG1";
my $log_path = $self->_log_path || "/tmp";
return qq(
log4perl.rootLogger = $log_level
log4perl.appender.SCREEN = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.stderr = 0
log4perl.appender.SCREEN.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern = %m %n
log4perl.appender.LOG1 = Log::Log4perl::Appender::File
log4perl.appender.LOG1.utf8 = 1
log4perl.appender.LOG1.filename = $log_path/eventstreamr.log
log4perl.appender.LOG1.mode = append
log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n
);
}
method _build__log_level() {
if ( defined $self->{config}){
return $self->{config}{log_level};
} elsif (defined $self->{log_level}) {
return $self->{log_level};
}
}
method _build__log_path() {
if (defined $self->{config}) {
return $self->{config}{config_path};
} elsif (defined $self->{config_path}) {
return $self->{config_path};
}
}
around $_ => sub {
my $orig = shift;
my $this = shift;
# one level for this method itself
# two levels for Class:;MOP::Method::Wrapped (the "around" wrapper)
# one level for Moose::Meta::Method::Delegation (the "handles" wrapper)
local $Log::Log4perl::caller_depth;
$Log::Log4perl::caller_depth += 4;
my $return = $this->$orig(@_);
$Log::Log4perl::caller_depth -= 4;
return $return;
} foreach @methods;
method _build__logger() {
my $this = shift;
my $loggerName = ref($this);
$self->log_config;
Log::Log4perl->init_once(\$self->log_config);
return Log::Log4perl->get_logger($loggerName)
}
1;
__END__
=pod
=encoding UTF-8
( run in 0.829 second using v1.01-cache-2.11-cpan-39bf76dae61 )