Jim Gallacher wrote:
Beyond that it still segfaults for me. The other problem is that you are not removing the handler instance from the logging instance so you still have a memory leak. 100k requests would result in 100k handler instances. Oh, and there might be a bit of a performance issue when emit() gets fired 100k times. ;) Or should I assume that the user will still be required to include req.register_cleanup(log.removeHandler, hdlr) in their code?

Not sure if this will help, but in my implementation I registered my hander
on the root logger as global code in the handler module, not for each
request.  In that case I used a threading.local to keep track of req, which
I had to register and free for each request of course.  I couldn't get
around the minimal bookkeeping required of registering the req object on
each request, though like Nic's code, I registered a cleanup in a closure to
handle the freeing.

Alternatively, you can register the server and use apache.log_error with a
server object, which should not leak.  Also, if you don't care about logging
to a particular server, you can, of course, just call apache.log_error
without a server argument.

Nick

Reply via email to