quetz-mod_python-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nick <n...@dd.revealed.net>
Subject Re: glue between apache and python logging
Date Fri, 21 Oct 2005 02:09:54 GMT
Graham Dumpleton wrote:
> Yes, effectively the same as what I was doing. As I highlighted in prior
> email though about request cache implementations, not sure it would
> work correctly if an internal redirect occurred and both original handler
> and target of internal redirect had registered request object. One needs
> to use a stack for self.local.req and push/pop the request object on to
> it.

Hm, very well.  I never really considered the case of using the internal 
redirect.  I'm an "old school" mod_python user, so I'm not up on all the 
new features apache2 brings to the table.  Reading the docs, I would 
suppose you could make use of req.prev somehow in these cases rather 
than manually keeping a separate stack?  E.g. in my free_req function, 
do "self.local.req = self.local.req.prev" (assuming if there hasn't been 
an internal_redirect, req.prev is None).

> Your code would still work, but if anything was logged by the original
> handler after the internal redirect had returned, the request object will
> have been wiped out and it would not log through "req" but through
> "apache.log_error()" instead.

Right, that's the intention: provide a reasonable fallback.

> Graham
> Nick wrote ..
>>Graham Dumpleton wrote:
>>>Hopefully everyone follows what I am talking about. I will try and get
>>>together a working example today of what I am talking about, but Nick,
>>>you may want to consider posting your code and how you are using it
>>>as it probably will not be too different.
>>Here's my sample code I was using.  Very rough and unpolished, since I
>>ultimately decided not to use it.  I haven't tried it in a while, but it
>>should more or less work.  apache.py might contain the following code:
>>from logger import log_handler
>>Sample usage might look like the following (to steal your example from
>>subsequent email):
>>   from mod_python import apache
>>   import logging
>>   log = logging.getLogger("mod_python")
>>   log.warning("importing handler")
>>   def handler(req):
>>     apache.log_handler.set_req(req) # <-- here's the extra code
>>     log.warning("running handler")
>>     req.content_type = 'text/plain'
>>     req.send_http_header()
>>     req.write('hello\n')
>>     return apache.OK
>>Notice that if you *don't* call set_req, logging will still work, but 
>>not according to any special ErrorLog settings in your apache config 
>>other than the global setting.  Also, since log_handler is available, 
>>you can change it's default formatting options somehow as a mod_python
>>directive in your apache config, or whatever else you want to set.

View raw message