Hash: SHA1

Julien Anguenot wrote:
> Hi,
> Gintautas Miliauskas wrote:
>>> I think the shift to the oh-so-much-better Python logging module is
>>> not complete.  See this bit in ZEO/runzeo.py:
>>>     def handle_sigusr2(self):
>>>         # TODO: this used to reinitialize zLOG. How do I achieve
>>>         # the same effect with Python's logging package?
>>>         # Should we restart as with SIGHUP?
>>>         log("received SIGUSR2, but it was not handled!", \
>>>              level=logging.WARNING)
>>> svn blames Tim for the comment, and Gintautas for the actual logging
>>> call change.
>> Ouch.  This migration took place such a long time ago that I barely
>> remember it, much less the details.  Apparently I did not know how to
>> fix this then, and I don't really know now either.
>> From this document it appears that zlog.initialize() would call some
>> preset initializer function:
>> http://ingo.fargonauten.de/epydoc/private/zLOG-module.html
>> That means that somewhere else set_initializer() must have been
>> called.  I found this by Fred Drake:
>> http://aspn.activestate.com/ASPN/Mail/Message/zope-Checkins/1926169
>> It looks like we should do some kind of a walk through all
>> StreamHandlers and try to reopen their streams if possible.  Do you
>> think this makes sense?
>> Shane Hathaway says in
>> http://mail.python.org/pipermail/python-dev/2006-January/059578.html :
>>> To be compatible with an external tool like logrotate, all a daemon
>>> needs to do is close and reopen log files at about the same time log
>>> rotation happens.  To handle this use case, I suggest the logging
>>> module needs a function named reopen(), which daemons can call upon
>>> receipt of a signal.  The reopen function will find all handlers with
>>> open files and ask them to reopen.
>> I take it that the logging module does not have such a function yet.
>> Sorry for my refactoring causing problems.
> Thank you for the answer. For the moment, there is no hurry on my side
> as I got a workaround.
> We could probably open a ticket in the collector for this. Should I do
> it ?

Yes.  I think the code for the external handler would look something
like the following code::

  import logging

  def rotate_logging_handlers():
      """ Close and reopen all file-based handlers.
          for h in logging._handlers.keys():
              if isinstance(h, logging.FileHandler):
                  h.strm = open(handler.baseFilename, h.mode))

This example is for the Python 2.3 version of the 'logging' module;  the
Python 2.4 version uses a list, '_handlersList', instead of the
'_handlers' dict.  See the 'shutdown' functions in each for how to
iterate over the list.

- --
Tres Seaver          +1 202-558-7113          [EMAIL PROTECTED]
Palladion Software   "Excellence by Design"    http://palladion.com
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to