Preserving logging streams through a daemon.DaemonContext switch

Ben Finney ben+python at benfinney.id.au
Fri Apr 9 21:09:16 EDT 2010


Vinay Sajip <vinay_sajip at yahoo.co.uk> writes:

> On Apr 9, 12:46 am, Ben Finney <ben+pyt... at benfinney.id.au> wrote:
> > Not quite. As the docs specify, you need to pass the *file
> > descriptors* for the files you want preserved.
>
> Okay, but the docstring you quoted:
>
> "Elements of the list are file descriptors (as returned by a file
> object's `fileno()` method) or Python `file` objects."
>
> implies that fh.stream would work as well as fh.stream.fileno()

You're quite right, I made a mistake in what I wrote above.

Rebelo <puntabluda at gmail.com> writes:

> Ben Finney wrote:
> > So how do we get the file object for a logging handler? The
> > ‘logging’ module documentation doesn't mention any way to get at the
> > stream object for the handlers.
> >
> > But looking at the source code for ‘StreamHandler’ on my system,
> > ‘/usr/lib/python2.5/logging/__init__.py’, shows a ‘stream’ attribute
> > that is bound to the stream object. It's not marked private (i.e.
> > it's not named with a leading underscore), so one presumes it is
> > part of the public API.

[…]

> >
> >     lh = logging.handlers.TimedRotatingFileHandler(
> >         LOG_FILENAME,
> >         # …
> >         )
> >     log_stream_descriptor = lh.stream.fileno()
> >
> >     daemon_context.files_preserve = [log_stream_descriptor]
> >

The above can then be simplified as:

    lh = logging.handlers.TimedRotatingFileHandler(
        LOG_FILENAME,
        # …
        )

    daemon_context.files_preserve = [lh.stream]

> thank you both for a detailed explanation.

I hope this helps you to make better use of ‘python-daemon’, and thank
you for raising questions here.

This is a good addition for the Frequently Asked Questions document; I
will do this and it will be available in the next version of the
library.

-- 
 \           “I prayed for twenty years but received no answer until I |
  `\          prayed with my legs.” —Frederick Douglass, escaped slave |
_o__)                                                                  |
Ben Finney



More information about the Python-list mailing list