Skip to content

Instantly share code, notes, and snippets.

@renatocron
Created February 21, 2019 16:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renatocron/19ff3986d5a17050d98004ad2681d24c to your computer and use it in GitHub Desktop.
Save renatocron/19ff3986d5a17050d98004ad2681d24c to your computer and use it in GitHub Desktop.
package YOURAPP::Logger;
use strict;
use DateTime;
use IO::Handle;
use Log::Log4perl qw(:easy);
if ( $ENV{YOURAPP_API_LOG_DIR} ) {
if ( -d $ENV{YOURAPP_API_LOG_DIR} ) {
my $date_now = DateTime->now->ymd('-');
my $app_type = $0 =~ /\.psgi/ ? 'api' : &_extract_basename($0);
my $log_file = $app_type eq 'api' ? "api.$date_now.$$" : "$app_type.$date_now";
$ENV{YOURAPP_API_LOG_FILE} = $ENV{YOURAPP_API_LOG_DIR} . "/$log_file.log";
print STDERR "Redirecting STDERR/STDOUT to $ENV{YOURAPP_API_LOG_FILE}\n";
close(STDERR);
close(STDOUT);
autoflush STDERR 1;
autoflush STDOUT 1;
open( STDERR, '>>', $ENV{YOURAPP_API_LOG_FILE} ) or die 'cannot redirect STDERR';
open( STDOUT, '>>', $ENV{YOURAPP_API_LOG_FILE} ) or die 'cannot redirect STDOUT';
}
else {
print STDERR "YOURAPP_API_LOG_DIR is not a dir\n";
}
}
else {
print STDERR "YOURAPP_API_LOG_DIR Not configured\n";
}
Log::Log4perl->easy_init(
{
level => $DEBUG,
layout => '%p{1}%d{yyyy-MM-dd HH:mm:ss.SSS}[%P]%x %m{indent=1}%n' ,
( $ENV{YOURAPP_API_LOG_FILE} ? ( file => '>>' . $ENV{YOURAPP_API_LOG_FILE} ) : () ),
'utf8' => 1,
autoflush => 1,
}
);
our @ISA = qw(Exporter);
our @EXPORT = qw(log_info log_fatal log_error get_logger);
my $logger = get_logger;
# logs
sub log_info {
my (@texts) = @_;
$logger->info( join ' ', @texts );
}
sub log_error {
my (@texts) = @_;
$logger->error( join ' ', @texts );
}
sub log_fatal {
my (@texts) = @_;
$logger->fatal( join ' ', @texts );
}
sub _extract_basename {
my ($path) = @_;
my ($part) = $path =~ /.+(?:\/(.+))$/;
return lc($part);
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment