stas 2004/09/09 09:58:08
Modified: . Changes xs/Apache/Log Apache__Log.h Added: t/response/TestVhost log.pm t/vhost log.t t/htdocs/vhost .cvsignore xs/Apache/ServerRec ServerRec_pm Log: - fix Apache::ServerRec::warn() - make Apache::ServerRec::warn exportable - test Apache::Log for vhosts Revision Changes Path 1.1 modperl-2.0/t/response/TestVhost/log.pm Index: log.pm =================================================================== package TestVhost::log; # testing that the warn and other logging functions are writing into # the vhost error_log and not the main one. use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::RequestUtil (); use Apache::ServerRec qw(warn); # override warn locally use File::Spec::Functions qw(catfile); use POSIX (); use Symbol (); use Apache::Const -compile => 'OK'; my @methods1 = ( '$r->log->warn', '$r->log_error', '$s->log->warn', '$s->log_error', '$s->warn', ); my @methods2 = ( 'Apache->warn', 'Apache::ServerRec->warn', 'Apache::ServerRec::warn', 'Apache::warn', 'warn', ); my $path = catfile Apache::Test::vars('documentroot'), qw(vhost error_log); my $fh; my $pos; sub handler { my $r = shift; plan $r, tests => 1 + @methods1 + @methods2; my $s = $r->server; $fh = Symbol::gensym(); open $fh, "<$path" or die "Can't open $path: $!"; seek $fh, 0, POSIX::SEEK_END(); $pos = tell $fh; ### $r|$s logging for my $m (@methods1) { eval "$m(q[$m])"; check($m); } ### object-less logging # set Apache->request($r) instead of using # PerlOptions +GlobalRequest # in order to make sure that the above tests work fine, # w/o having the global request set Apache->request($r); for my $m (@methods2) { eval "$m(q[$m])"; check($m); } # internal warnings (also needs +GlobalRequest) { no warnings; # avoid FATAL warnings use warnings; local $SIG{__WARN__}= \&Apache::ServerRec::warn; eval q[my $x = "aaa" + 1;]; check(q[Argument "aaa" isn't numeric in addition]) } # die logs into the vhost log just fine #die "horrible death!"; close $fh; Apache::OK; } sub check { my $find = shift; $find = ref $find eq 'Regexp' ? $find : qr/\Q$find/; my $diff = diff(); ok t_cmp $diff, $find; } # extract any new logged information since the last check, move the # filehandle to the end of the file sub diff { # XXX: is it possible that some system will be slow to flush the # buffers and we may need to wait a bit and retry if we get see # no new logged data? seek $fh, $pos, POSIX::SEEK_SET(); # not really needed local $/; # slurp mode my $diff = <$fh>; seek $fh, 0, POSIX::SEEK_END(); $pos = tell $fh; return defined $diff ? $diff : ''; } 1; __END__ <NoAutoConfig> <VirtualHost TestVhost::log> DocumentRoot @documentroot@/vhost ErrorLog @documentroot@/vhost/error_log <Location /TestVhost__log> SetHandler modperl # required when $s and $r aren't passed PerlOptions +GlobalRequest PerlResponseHandler TestVhost::log </Location> </VirtualHost> </NoAutoConfig> 1.1 modperl-2.0/t/vhost/log.t Index: log.t =================================================================== use Apache::TestUtil; use Apache::TestRequest 'GET_BODY_ASSERT'; my $config = Apache::Test::config(); my $vars = $config->{vars}; my $module = 'TestVhost::log'; my $path = Apache::TestRequest::module2path($module); Apache::TestRequest::module($module); my $hostport = Apache::TestRequest::hostport($config); t_debug("connecting to $hostport"); print GET_BODY_ASSERT "http://$hostport/$path"; 1.1 modperl-2.0/t/htdocs/vhost/.cvsignore Index: .cvsignore =================================================================== error_log 1.477 +8 -3 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.476 retrieving revision 1.477 diff -u -u -r1.476 -r1.477 --- Changes 9 Sep 2004 15:08:03 -0000 1.476 +++ Changes 9 Sep 2004 16:58:08 -0000 1.477 @@ -15,6 +15,14 @@ introduce a custom modperl error message for failing filter handlers (previously 'unknown error' coming from rc=500 was logged) [Stas] +Fix Apache::Log methods/functions to log into the vhost's error_log +file (if there is one). ( $s->log->*, $s->log_error, $s->log_serror, +Apache::ServerRec::warn, etc.). Apache::ServerRec can now export its +warn function to override CORE::warn [Stas] + +Fix $s->log->*, $s->log_error and $s->log_serror to again log into the +vhost's error_log file (if there is one). [Stas] + $s->log->warn and other $s->log->foo are now logging to the right vhost server and not the global one. modperl_sv2server_rec was broken. [Stas] @@ -45,9 +53,6 @@ fix the modperl build, where httpd has been built against separate installations of apr-util and apr, where apr-util has been installed with a different includedir to apr. [Joe Orton] - -Fix $s->log->*, $s->log_error and $s->log_serror to again log into the -vhost's error_log file (if there is one). [Stas] $Apache::Server::SaveConfig is now $Apache::PerlSections::Save [Geoffrey Young] 1.19 +3 -1 modperl-2.0/xs/Apache/Log/Apache__Log.h Index: Apache__Log.h =================================================================== RCS file: /home/cvs/modperl-2.0/xs/Apache/Log/Apache__Log.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -u -r1.18 -r1.19 --- Apache__Log.h 8 Sep 2004 23:41:53 -0000 1.18 +++ Apache__Log.h 9 Sep 2004 16:58:08 -0000 1.19 @@ -308,7 +308,9 @@ i = 1; } else { - s = modperl_global_get_server_rec(); + request_rec *r = NULL; + (void)modperl_tls_get_request_rec(&r); + s = r ? r->server : modperl_global_get_server_rec(); } if (items > 1+i) { 1.1 modperl-2.0/xs/Apache/ServerRec/ServerRec_pm Index: ServerRec_pm =================================================================== use Exporter (); use Apache::Log (); # Apache::ServerRec::loads warn @Apache::ServerRec::EXPORT_OK = qw(warn); *Apache::ServerRec::import = \&Exporter::import;