NAME
Plack::Middleware::DBIC::QueryLog - Expose a DBIC QueryLog Instance in Middleware
SYNOPSIS
use Plack::Builder;
builder {
enable 'DBIC::QueryLog',
querylog_args => {passthrough => 1};
$app;
};
DESCRIPTION
Plack::Middleware::DBIC::QueryLog does one thing, it places an object that is either an instance of DBIx::Class::QueryLog OR a compatible object into the $env
under plack.middleware.dbic.querylog
. A new instance is created for each incoming request.
The querylog is intended to be used by DBIX::Class to log and profile SQL queries, particularly during the context of a web request handled by your Plack application. See the documentation for DBIx::Class::QueryLog and in "debugobj" in DBIx::Class::Storage for more information.
This middleware is intended to act as a bridge between DBIx::Class, which can consume and populate the querylog, with a reporting tool such as seen in Plack::Middleware::Debug::DBIC::QueryLog. This functionality was refactored out of Plack::Middleware::Debug::DBIC::QueryLog to facilitate interoperation with other types of reporting tools. For example, you may want query logging but you don't need the Plack debug panels (maybe you are building an RPC or REST application server and want sql query logging, is a possible use case).
Unless you are building some custom logging tools, you probably just want to use the existing debug panel (Plack::Middleware::Debug::DBIC::QueryLog) rather than building something custom around this middleware.
If you are using an existing web application development system such as Catalyst, you can use Catalyst::TraitFor::Model::DBIC::Schema::QueryLog::AdoptPlack to 'hook' the query log into your DBIx::Class schema model. If you are using a different framework, or building your own, please consider releasing your code or sending me a document patch suitable for including in a workbook or FAQ.
ARGUMENTS
This middleware accepts the following arguments.
querylog_class
This is the class which is used to build the querylog
unless one is already defined. It defaults to DBIx::Class::QueryLog. You should probably leave this alone unless you need to subclass or augment DBIx::Class::QueryLog.
If the class name you pass has not already been included (via use
or require
) we will automatically try to require
it.
querylog_args
Accepts a HashRef of data which will be passed to "querylog_class" when building the querylog
.
SUBROUTINES
This middleware defines the following public subroutines
PSGI_KEY
Returns the PSGI $env
key under which you'd expect to find an instance of DBIx::Class::QueryLog.
get_querylog_from_env
Given a Plack $env
, returns a DBIx::Class::QueryLog, if one exists. You should use this in your code that is trying to access the querylog. For example:
use Plack::Middleware::DBIC::QueryLog;
sub get_querylog_from_env {
my ($self, $env) = @_;
Plack::Middleware::DBIC::QueryLog->get_querylog_from_env($env);
}
This returns undef if it does not exist. This is the officially supported interface for extracting a DBIx::Class::QueryLog from a Plack request.
SEE ALSO
Plack, Plack::Middleware, Plack::Middleware::Debug::DBIC::QueryLog, Catalyst::TraitFor::Model::DBIC::Schema::QueryLog::AdoptPlack
AUTHOR
John Napiorkowski, <jjnapiork@cpan.org>
COPYRIGHT & LICENSE
Copyright 2011, John Napiorkowski
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.