++ed by:

1 PAUSE user

Masahiro Nagano
and 1 contributors


Plack::Middleware::AxsLog - Yet another AccessLog Middleware


  use Plack::Builder;

  builder {
      enable 'AxsLog',
        combined => 1,
        response_time => 1,
        error_only => 1,


Alternative implementation of Plack::Middleware::AccessLog. This module uses Apache::LogFormat::Compiler, so 4x-5x faster than Plack::Middleware::AccessLog in micro benchmarking. AxsLog also can set condition to display logs by response_time and status code.


combined: Bool

log format. if disabled, "common" format used. default: 1 (combined format used)

common (Common Log Format) format is

  %h %l %u %t \"%r\" %>s %b
  => - - [23/Aug/2012:00:52:15 +0900] "GET / HTTP/1.0" 200 645

combined (NCSA extended/combined log format) format is

  %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"
  => - - [23/Aug/2012:00:52:15 +0900] "GET / HTTP/1.1" 200 645 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1"
ltsv: Bool

use ltsv log format. default: 0

LTSV (Labeled Tab-separated Values) format is

  => host:<TAB>user:-<TAB>time:[23/Aug/2012:00:52:15 +0900]<TAB>req:GET / HTTP/1.1<TAB>status:200<TAB>size:645<TAB>"referer:-<TAB>ua:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1

See also http://ltsv.org/

format: String

A format string.

  builder {
      enable 'AxsLog', 
          format => '%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" %D';

See details on perldoc Apache::LogFormat::Compiler

response_time: Bool

Adds time taken to serve the request. default: 0. This args effect to common, combined and ltsv format.

error_only: Bool

Display logs if response status is error (4xx or 5xx). default: 0

long_response_time: Int (microseconds)

Display log if time taken to serve the request is above long_response_time. default: 0 (all request logged)

logger: Coderef

Callback to print logs. default:none ( output to psgi.errors )

  use File::RotateLogs;
  my $logger = File::RotateLogs->new();

  builder {
      enable 'AxsLog',
        logger => sub { $logger->print(@_) }


Masahiro Nagano <kazeburo {at} gmail.com>




This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.