Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Logging queries for DBI

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
builder
lib/DBIx
script
t
xt
.gitignore
.proverc
.travis.yml
Build.PL
Changes
LICENSE
META.json
README.md
cpanfile
minil.toml

README.md

NAME

DBIx::QueryLog - Logging queries for DBI

SYNOPSIS

use DBIx::QueryLog;
my $row = $dbh->selectrow_hashref('SELECT * FROM people WHERE user_id = ?', undef, qw/1986/);
# => SELECT * FROM people WHERE user_id = '1986';

DESCRIPTION

DBIx::QueryLog is logs each execution time and the actual query.

Currently, works on DBD::mysql, DBD::Pg and DBD::sqlite.

CLASS METHODS

  • threshold

    Logged if exceeding this value. (default not set)

    DBIx::QueryLog->threshold(0.1); # sec
    

    And, you can also specify DBIX_QUERYLOG_THRESHOLD environment variable.

  • probability

    Run only once per defined value. (default not set)

    DBIx::QueryLog->probability(100); # about 1/100
    

    And, you can also specify DBIX_QUERYLOG_PROBABILITY environment variable.

  • logger

    Sets logger class (e.g. Log::Dispach)

    Logger class must can be call `log` method.

    DBIx::QueryLog->logger($logger);
    
  • skip_bind

    If enabled, will be faster, but SQL is not bound.

    DBIx::QueryLog->skip_bind(1);
    my $row = $dbh->do(...);
    # => 'SELECT * FROM people WHERE user_id = ?' : [1986]
    

    And, you can also specify DBIX_QUERYLOG_SKIP_BIND environment variable.

  • color

    If you want to colored SQL output are:

    DBIx::QueryLog->color('green');
    

    And, you can also specify DBIX_QUERYLOG_COLOR environment variable.

  • useqq

    using $Data::Dumper::Useqq.

    DBIx::QueryLog->useqq(1);
    

    And, you can also specify DBIX_QUERYLOG_USEQQ environment variable.

  • compact

    Compaction SQL.

    DBIx::QueryLog->compact(1);
    #  FROM: SELECT          *  FROM      foo WHERE bar = 'baz'
    #  TO  : SELECT * FROM foo WHERE bar = 'baz'
    

    And, you can also specify DBIX_QUERYLOG_COMPACT environment variable.

  • explain

    EXPERIMENTAL

    Logged Explain.

    DBIx::QueryLog->explain(1);
    my $row = $dbh->do(...);
    # => SELECT * FROM peaple WHERE user_id = '1986'
    #  .----------------------------------------------------------------------------------------------.
    #  | id | select_type | table  | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    #  +----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+
    #  |  1 | SIMPLE      | peaple | const | PRIMARY       | PRIMARY |       4 | const |    1 |       |
    #  '----+-------------+--------+-------+---------------+---------+---------+-------+------+-------'
    

    And, you can also specify DBIX_QUERYLOG_EXPLAIN environment variable.

  • show_data_source

    if enabled, added DBI data_source in default message.

    $dbh->do('SELECT * FROM sqlite_master');
    # [2012-03-09T00:58:23] [main] [0.000953] SELECT * FROM sqlite_master at foo.pl line 34
    
    DBIx::QueryLog->show_data_source(1);
    $dbh->do('SELECT * FROM sqlite_master');
    # [2012-03-09T00:58:23] [main] [0.000953] [SQLite:dbname=/tmp/TrSATdY3cc] SELECT * FROM sqlite_master at foo.pl line 56
    

    And, you can also specify DBIX_QUERYLOG_SHOW_DATASOURCE environment variable.

  • guard

    Returned guard object.

    use DBIx::QueryLog ();
    {
        my $guard = DBIx::QueryLog->guard;
        # ... do something
    }
    

    This code same as are:

    use DBIx::QueryLog ();
    
    DBIx::QueryLog->enable;
    # ... do something
    DBIx::QueryLog->disable;
    
  • ignore_trace

    Returned guard object. Disable trace in the scope.

    use DBIx::QueryLog;
    
    # enabled
    $dbh->do(...);
    
    {
        my $guard = DBIx::QueryLog->ignore_trace;
        # disable
        $dbh->do(...);
    }
    
    # enabled
    $dbh->do(...)
    
  • is_enabled

    Return true or false

    use DBIx::QueryLog ();
    
    say DBIx::QueryLog->is_enabled;
    
    DBIx::QueryLog->disable;
    

    SEE ALSO Localization section.

TIPS

Localization

If you want to localize the scope are:

use DBIx::QueryLog (); # or require DBIx::QueryLog;

DBIx::QueryLog->begin; # or DBIx::QueryLog->enable
my $row = $dbh->do(...);
DBIx::QueryLog->end;   # or DBIx::QueryLog->disable

Now you could enable logging between begin and end.

LOG_LEVEL

If you set logger, it might want to change the logging level.

It can be modified as follows:

$DBIx::QueryLog::LOG_LEVEL = 'info'; # default 'debug'

OUTPUT

If you want to change of output are:

open my $fh, '>', 'dbix_query.log';
$DBIx::QueryLog::OUTPUT = $fh;

or you can specify code reference:

$DBIx::QueryLog::OUTPUT = sub {
    my %params = @_;

    my $format = << 'FORMAT';
localtime  : %s       # ISO-8601 without timezone
level      : %s       # log level ($DBIx::QueryLog::LOG_LEVEL)
time       : %f       # elasped time
data_source: $s       # data_source
sql        : %s       # executed query
bind_params: %s       # bind parameters
pkg        : %s       # caller package
file       : %s       # caller file
line       : %d       # caller line
FORMAT

    printf $format,
        @params{qw/localtime level pkg time data_source sql/},
        join(', ', @{$params{bind_params}}),
        @params{qw/file line/};

    printf "AutoCommit?: %d\n", $params->{dbh}->{AutoCommit} ? 1 : 0;
};

Default $OUTPUT is STDERR.

AUTHOR

xaicron

THANKS TO

tokuhirom

yibe

kamipo

tomi-ru

riywo

makamaka

BUG REPORTING

Plese use github issues: https://github.com/xaicron/p5-DBIx-QueryLog/issues.

COPYRIGHT

Copyright 2010 - xaicron

LICENSE

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

SEE ALSO

DBI

Something went wrong with that request. Please try again.