Skip to content

Instantly share code, notes, and snippets.

@dex4er
Created March 7, 2012 15:00
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 dex4er/1993652 to your computer and use it in GitHub Desktop.
Save dex4er/1993652 to your computer and use it in GitHub Desktop.
Default PSGI application
log4perl.logger.plack = DEBUG, LogfilePlack
log4perl.appender.LogfilePlack = Log::Dispatch::File::Stamped
log4perl.appender.LogfilePlack.stamp_fmt = %Y-%m-%d
log4perl.appender.LogfilePlack.filename = log/error.log
log4perl.appender.LogfilePlack.layout = PatternLayout
log4perl.appender.LogfilePlack.layout.ConversionPattern = %d{ISO8601}: %c: %m{chomp}%n
log4perl.logger.access = DEBUG, LogfileAccess
log4perl.appender.LogfileAccess = Log::Dispatch::File::Stamped
log4perl.appender.LogfileAccess.stamp_fmt = %Y-%m-%d
log4perl.appender.LogfileAccess.filename = log/access.log
log4perl.appender.LogfileAccess.layout = PatternLayout
log4perl.appender.LogfileAccess.layout.ConversionPattern = %m{chomp}%n
log4perl.logger.traffic = DEBUG, LogfileTraffic
log4perl.appender.LogfileTraffic = Log::Dispatch::File::Stamped
log4perl.appender.LogfileTraffic.stamp_fmt = %Y-%m-%d
log4perl.appender.LogfileTraffic.filename = log/traffic.log
log4perl.appender.LogfileTraffic.layout = PatternLayout
log4perl.appender.LogfileTraffic.layout.ConversionPattern = %m{chomp}%n
#!/usr/bin/perl
# Default environment for PSGI applications
use strict;
# Enable full stacktrace
use Exception::Base verbosity => 3;
use Exception::Died '%SIG' => 'die';
use Exception::System;
use Plack::Builder;
use Log::Log4perl qw(:levels get_logger);
use Tie::Log4perl;
use Path::Class;
use constant DEFAULT_LOG4PERL => {
'log4perl.logger' => 'DEBUG, Screen',
'log4perl.appender.Screen' => 'Log::Log4perl::Appender::Screen',
'log4perl.appender.Screen.stderr' => 0,
'log4perl.appender.Screen.layout' => 'PatternLayout',
'log4perl.appender.Screen.layout.ConversionPattern' => '%d{ISO8601}: %c: %m{chomp}%n',
};
my $app_filename = "$ENV{PLACK_ENV}.psgi";
chdir Path::Class::File->new(__FILE__)->dir or Exception::System->throw;
chdir Path::Class::File->new($app_filename)->dir or Exception::System->throw;
my $logconf =
-f "$ENV{PLACK_ENV}.l4p" && "$ENV{PLACK_ENV}.l4p" ||
-f "app.l4p" && "app.l4p" ||
DEFAULT_LOG4PERL;
Log::Log4perl->init($logconf);
my $logger_access = get_logger('access');
my $logger_traffic = get_logger('traffic');
my $logger_plack = get_logger('plack');
# Workaround for Starman
sub Tie::Log4perl::OPEN { 1 };
# Redirect STDOUT/STDERR into log4perl
if (ref $logconf ne 'HASH') {
tie *STDERR, 'Tie::Log4perl', logger => $logger_plack, level => $INFO, prefix => '';
tie *STDOUT, 'Tie::Log4perl', logger => $logger_plack, level => $INFO, prefix => '';
};
# Load real psgi (plackup -E real_app)
my $app = Plack::Util::load_psgi($app_filename);
print STDERR "Loaded $app_filename\n";
# Clean up server-status
unlink 'run/counter_file';
unlink <run/scoreboard/*>;
# Build PSGI app
builder {
enable 'Log4perl', category => 'plack';
enable 'LogWarn';
enable 'AccessLog',
logger => sub {
my $message = join '', @_;
$logger_access->log($INFO, $message);
};
enable 'TrafficLog',
logger => sub {
my $message = join '', @_;
$logger_traffic->log($INFO, $message);
};
enable 'Plack::Middleware::ServerStatus::Lite',
path => '/server-status',
allow => [ '127.0.0.1' ],
counter_file => 'run/counter_file',
scoreboard => 'run/scoreboard';
$app;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment