stas        2004/09/16 17:00:34

  Modified:    src/docs/2.0/api/Apache Log.pod
  Log:
  logging API sync
  
  Revision  Changes    Path
  1.15      +138 -14   modperl-docs/src/docs/2.0/api/Apache/Log.pod
  
  Index: Log.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/Log.pod,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -u -r1.14 -r1.15
  --- Log.pod   23 Aug 2004 18:51:49 -0000      1.14
  +++ Log.pod   17 Sep 2004 00:00:34 -0000      1.15
  @@ -23,9 +23,7 @@
                    APR::ENOTIME, "debug print");
     Apache::ServerRec->log_error("routine warning");
     
  -  Apache->warn("routine warning");
  -  Apache::warn("routine warning");
  -  Apache::ServerRec->warn("routine warning");
  +  Apache::ServerRec::warn("routine warning");
   
     #in a handler
     #------------
  @@ -62,6 +60,7 @@
         $s->log_serror(Apache::Log::LOG_MARK, Apache::LOG_ERR,
                        APR::ENOTIME, "fatal error");
   
  +      $r->warn('routine request warning');
         $s->warn('routine server warning');
   
         return Apache::OK;
  @@ -338,9 +337,38 @@
   
   =item since: 1.99_12
   
  +=back
  +
  +
  +
  +=head2 C<$s-E<gt>warn>
  +
  +  $s->warn(@warnings);
  +
  +is the same as:
  +
  +  $s->log_error(Apache::Log::LOG_MARK, Apache::LOG_WARNING,
  +                APR::SUCCESS, @warnings)
  +
  +=over 4
  +
  +=item obj: C<$s>
  +( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  +
  +=item arg1: C<@warnings> ( strings ARRAY )
  +
  +array of warning strings
  +
  +=item ret: no return value
  +
  +=item since: 1.99_12
   
   =back
   
  +For example:
  +
  +  $s->warn('routine server warning');
  +
   
   
   
  @@ -438,6 +466,37 @@
   
   
   
  +=head2 C<$r-E<gt>warn>
  +
  +  $r->warn(@warnings);
  +
  +is the same as:
  +
  +  $r->log_error(Apache::Log::LOG_MARK, Apache::LOG_WARNING,
  +                APR::SUCCESS, @warnings)
  +
  +=over 4
  +
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
  +
  +=item arg1: C<@warnings> ( strings ARRAY )
  +
  +array of warning strings
  +
  +=item ret: no return value
  +
  +=item since: 1.99_17
  +
  +=back
  +
  +For example:
  +
  +  $r->warn('routine server warning');
  +
  +
  +
  +
   
   
   
  @@ -565,28 +624,93 @@
   
   
   
  +=head1 Virtual Hosts
   
  +Code running from within a virtual host needs to be able to log into
  +its C<ErrorLog> file, if different from the main log. Calling any of
  +the logging methods on the C<$r> and C<$s> objects will do the logging
  +correctly.
   
  -=head1 Aliases
  +If the core C<warn()> is called, it'll be always logged to the main
  +log file. Here is how to make it log into the vhost F<error_log> file.
  +Let's say that we start with the following code:
   
  -=head2 C<$s-E<gt>warn>
  +  warn "the code is smoking";
   
  -  $s->warn(@warnings);
  +=over
   
  -is the same as:
  +=item 1
   
  -  $s->log_error(Apache::Log::LOG_MARK, Apache::LOG_WARNING,
  -                APR::SUCCESS, @warnings)
  +First, we need to use mod_perl's logging function, instead of
  +C<CORE::warn>
   
  -For example:
  +Either replace C<warn> with C<Apache::ServerRec::warn>:
   
  -  $s->warn('routine server warning');
  +  use Apache::Log ();
  +  Apache::ServerRec::warn("the code is smoking");
  +
  +or import it into your code:
  +
  +  use Apache::ServerRec qw(warn); # override warn locally
  +  warn "the code is smoking";
  +
  +or override C<CORE::warn>:
  +
  +  use Apache::Log ();
  +  *CORE::GLOBAL::warn = \&Apache::ServerRec::warn;
  +  warn "the code is smoking";
  +
  +Avoid using the latter suggestion, since it'll affect all the code
  +running on the server, which may break things. Of course you can
  +localize that as well:
  +
  +  use Apache::Log ();
  +  local *CORE::GLOBAL::warn = \&Apache::ServerRec::warn;
  +  warn "the code is smoking";
  +
  +Chances are that you need to make the internal Perl warnings go into
  +the vhost's F<error_log> file as well. Here is how to do that:
  +
  +  use Apache::Log ();
  +  local $SIG{__WARN__} = \&Apache::ServerRec::warn;
  +  eval q[my $x = "aaa" + 1;]; # this issues a warning
  +
  +Notice that it'll override any previous setting you may have had,
  +disabling modules like C<CGI::Carp> which also use C<$SIG{__WARN__}>
  +
  +=item 2
  +
  +Next we need to figure out how to get hold of the vhost's server
  +object.
  +
  +Inside HTTP request handlers this is possible via
  +C<Apache-E<gt>request|docs::2.0::api::Apache::RequestUtil/C_request_>. Which
  +requires either C<L<PerlOptions
  ++GlobalRequest|docs::2.0::user::config::config/C_GlobalRequest_>>
  +setting or can be also done at runtime if C<$r> is available:
  +
  +  use Apache::RequestUtil ();
  +  sub handler {
  +      my $r = shift;
  +      Apache->request($r);
  +      ...
  +
  +Outside HTTP handlers at the moment it is not possible, to get hold of
  +the vhost's F<error_log> file. This shouldn't be a problem for the
  +code that runs only under mod_perl, since the always available C<$s>
  +object can invoke a plethora of methods supplied by
  +C<Apache::Log>. This is only a problem for modules, which are supposed
  +to run outside mod_perl as well.
  +
  +META: To solve this we think to introduce 'PerlOptions +GlobalServer',
  +a big brother for 'PerlOptions +GlobalRequest', which will be set in
  +modperl_hook_pre_connection.
  +
  +
  +=back
   
  -=head2 C<Apache-E<gt>warn>
   
  -=head2 C<Apache::warn>
   
  -  Apache->warn(@warnings);
   
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to