2011年10月31日
デフォは STDERR
に出力しててたんですが、$DBIx::QueryLog::OUTPUT
にファイルハンドルなら何でも設定できるようになりました。
が、今考えたら、Log::Minimal みたいな感じにしたほうがよかった!
一応、DBIx::QueryLog->logger($logger)
とかで logger 指定できるのでいいんですけど。
あと、color
と compresscompact
と useqq
っていうオプションを追加しました。
それぞれ env DBIX_QUERYLOG_(COLOR|
とかでも設定できます。
COMPRESSCOMPACT|USEQQ)
軽く例を上げると、useqq
は
# local $Data::Dumper::Useqq = 1; # local $Data::Dumper::Terse = 1; # local $Data::Dumper::Indent = 0; # とした Data::Dumper::Dumper を通す DBIx::QueryLog->useqq(1); # or $ENV{DBIX_QUERYLOG_USEQQ} = 1 my $row = $dbh->selectrow_hashref(<< 'SQL', undef, 'nekokak'); SELECT * FROM dis WHERE name = ? SQL # => "SELECT * FROM\n dis\nWHERE name = 'nekokak'\n"
って感じになります。
compresscompact
は空白を全部スペース一個に変えます。SQL::Tokenizer とか使ってるのでそのへんのオーバヘッドはあるでしょう
DBIx::QueryLog->compresscompact(1); # or $ENV{DBIX_QUERYLOG_COMPRESSCOMPACT} = 1 my $row = $dbh->selectrow_hashref(<< 'SQL', undef, 'nekokak'); SELECT * FROM dis WHERE name = ? SQL # => SELECT * FROM dis WHERE name = 'nekokak'"
SQL を完全なまま再現したいけど一行にしたい場合は、useqq で、壊れてもいいから短くしたいなら compress ってところですね。
いちおう、useqq は unprintable な文字を printable にしてくれるっていう副作用もあるので、両方指定するのもありです。
あと、color はそのまんまで、Term::ANSIColor のやつを使えます。
DBIx::QueryLog->color('black on_yellow'); # or $ENV{DBIX_QUERYLOG_COLOR} = "black on_yellow"
ちなみに、自分は DBIx::QueryLog は本番環境でがっつり使うってよりは、手元の環境とかでデバッグ時に use してやるだけで全部の SQL が吐かれるので便利って感じで使ってます。
メソッドをラップするので、若干のオーバヘッドがありますし。
本番環境とかでその瞬間の SQL をトレースしたい場合は、tcpdump を使ったほうが効率的ですね!
追記
version 0.18 から、Log::Minimal みたいに、$OUTPUT に sub { ... }
を渡せるようになりましたので何でもやり放題ですね。やった!
local $DBIx::QueryLog::OUTPUT = sub { my %args = @_; printf "%s\n", $args{sql}; };
%args
に何が渡ってくるかは、POD を参照のこと。
コメント一覧
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう!
更新された場合に、より良く、より面白いかもしれ
エルメス 財布 http://www.sparkle.com.tw/uploadfile/buying/hermes-jp-88.html