Created
March 7, 2012 15:00
-
-
Save dex4er/1993652 to your computer and use it in GitHub Desktop.
Default PSGI application
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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