package LIMS::Local::QueryLog; use strict; $|++; BEGIN { use POSIX qw(strftime); use Log::Dispatch; # use Log::Dispatch::File::Rolling; use Log::Dispatch::File; # use Log::Dispatch::FileRotate; # huge performance penalty use LIMS::Local::Utils; use Sub::Exporter -setup => { exports => [ qw(set_querylog_args clear_querylog_args) ] }; $SIG{__WARN__} = \&_warn_handler; } use vars qw($LogArgs); sub set_querylog_args { $LogArgs = shift; # $LogArgs{username} = $username; } sub clear_log_args { # %LogArgs = () } sub _warn_handler { my $warn = shift; my $dispatcher = Log::Dispatch->new; # my $divider = '-+-' x 10; my $path_to_app_root = LIMS::Local::Utils::find_home(); # warn 'path_to_app:'.$path_to_app_root; $dispatcher->add( Log::Dispatch::File->new( name => 'edits', min_level => 'info', # Log::Dispatch::File::Rolling: # filename => "$path_to_app_root/logs/lims_sql_%d{yyyy_MMdd}.log", filename => "$path_to_app_root/logs/sql.log", permissions => 0666, mode => 'append', ) ); $dispatcher->add( Log::Dispatch::File->new( name => 'queries', min_level => 'debug', filename => "$path_to_app_root/logs/sql.txt", permissions => 0666, mode => 'append', ) ); # $warn =~ s/\s{2}(JOIN)/\n\t$1/g; # line-break & tab JOIN's my $timestamp = strftime "[%d-%b-%Y %H:%M:%S]", localtime; my $output = sprintf "%s %s\n%s\n", $timestamp, uc $LogArgs->{user}, $warn; if ($warn =~ /^(INSERT|UPDATE|DELETE)/) { # SELECT|SHOW, etc - ie non-edits $dispatcher->log(level => 'info', message => $output); } elsif ($warn =~ /^SELECT/) { $dispatcher->log(level => 'debug', message => $output); } # open my $fh, '>>'.'/tmp/env.txt' or die $!; # while( my ($k,$v) = each %ENV ) { # print $fh "$k: $v\n"; # } # don't want SQL statememts in apache's error.log return if ( ( $warn =~ /^Making method/ || grep { $warn =~ /\A$_/ } qw/SELECT INSERT UPDATE DELETE SHOW/ ) && $ENV{ROSEDB_DEVINIT} !~ /devel/ ); CORE::warn($warn); # print $fh $warn; } =begin # FileRotate causes serious performance hit here $dispatcher->add( Log::Dispatch::FileRotate->new( name => 'query', min_level => 'debug', filename => "$path_to_app_root/logs/sql.txt", permissions => 0666, mode => 'append', DatePattern => 'yyyy-MM-dd', # every day # or size => 1, # operates in date or size mode ) ); =cut 1;