Commit ccd8bc8a authored by Vinay Sajip's avatar Vinay Sajip

Issue #8327: logging: Clarification of propagation functionality in documentation.

parent ad971d62
...@@ -251,11 +251,11 @@ hierarchical structures. Multiple calls to :func:`getLogger` with the same name ...@@ -251,11 +251,11 @@ hierarchical structures. Multiple calls to :func:`getLogger` with the same name
will return a reference to the same logger object. Loggers that are further will return a reference to the same logger object. Loggers that are further
down in the hierarchical list are children of loggers higher up in the list. down in the hierarchical list are children of loggers higher up in the list.
For example, given a logger with a name of ``foo``, loggers with names of For example, given a logger with a name of ``foo``, loggers with names of
``foo.bar``, ``foo.bar.baz``, and ``foo.bam`` are all children of ``foo``. ``foo.bar``, ``foo.bar.baz``, and ``foo.bam`` are all descendants of ``foo``.
Child loggers propagate messages up to their parent loggers. Because of this, Child loggers propagate messages up to the handlers associated with their
it is unnecessary to define and configure all the loggers an application uses. ancestor loggers. Because of this, it is unnecessary to define and configure
It is sufficient to configure a top-level logger and create child loggers as handlers for all the loggers an application uses. It is sufficient to
needed. configure handlers for a top-level logger and create child loggers as needed.
Handlers Handlers
...@@ -283,15 +283,16 @@ custom handlers) are the following configuration methods: ...@@ -283,15 +283,16 @@ custom handlers) are the following configuration methods:
are there two :func:`setLevel` methods? The level set in the logger are there two :func:`setLevel` methods? The level set in the logger
determines which severity of messages it will pass to its handlers. The level determines which severity of messages it will pass to its handlers. The level
set in each handler determines which messages that handler will send on. set in each handler determines which messages that handler will send on.
:func:`setFormatter` selects a Formatter object for this handler to use.
* :func:`setFormatter` selects a Formatter object for this handler to use.
* :func:`addFilter` and :func:`removeFilter` respectively configure and * :func:`addFilter` and :func:`removeFilter` respectively configure and
deconfigure filter objects on handlers. deconfigure filter objects on handlers.
Application code should not directly instantiate and use handlers. Instead, the Application code should not directly instantiate and use instances of
:class:`Handler` class is a base class that defines the interface that all :class:`Handler`. Instead, the :class:`Handler` class is a base class that
Handlers should have and establishes some default behavior that child classes defines the interface that all Handlers should have and establishes some
can use (or override). default behavior that child classes can use (or override).
Formatters Formatters
...@@ -523,7 +524,9 @@ support desk staff, system administrators, developers). Handlers are passed ...@@ -523,7 +524,9 @@ support desk staff, system administrators, developers). Handlers are passed
can have zero, one or more handlers associated with it (via the can have zero, one or more handlers associated with it (via the
:meth:`addHandler` method of :class:`Logger`). In addition to any handlers :meth:`addHandler` method of :class:`Logger`). In addition to any handlers
directly associated with a logger, *all handlers associated with all ancestors directly associated with a logger, *all handlers associated with all ancestors
of the logger* are called to dispatch the message. of the logger* are called to dispatch the message (unless the *propagate* flag
for a logger is set to a false value, at which point the passing to ancestor
handlers stops).
Just as for loggers, handlers can have levels associated with them. A handler's Just as for loggers, handlers can have levels associated with them. A handler's
level acts as a filter in the same way as a logger's level does. If a handler level acts as a filter in the same way as a logger's level does. If a handler
...@@ -854,8 +857,8 @@ instantiated directly, but always through the module-level function ...@@ -854,8 +857,8 @@ instantiated directly, but always through the module-level function
.. attribute:: Logger.propagate .. attribute:: Logger.propagate
If this evaluates to false, logging messages are not passed by this logger or by If this evaluates to false, logging messages are not passed by this logger or by
child loggers to higher level (ancestor) loggers. The constructor sets this its child loggers to the handlers of higher level (ancestor) loggers. The
attribute to 1. constructor sets this attribute to 1.
.. method:: Logger.setLevel(lvl) .. method:: Logger.setLevel(lvl)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment