logging_tree


Namelogging_tree JSON
Version 1.9 PyPI version JSON
download
home_pagehttps://github.com/brandon-rhodes/logging_tree
SummaryIntrospect and display the logger tree inside "logging"
upload_time2021-04-10 10:08:26
maintainer
docs_urlNone
authorBrandon Rhodes
requires_python
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Introspection for the ``logging`` logger tree in the Standard Library.

You can install this package with the standard ``pip`` command::

    $ pip install logging_tree

While you can write programs that call this package's ``tree()``
function and examine the hierarchy of logger objects that it finds
inside of the Standard Library ``logging`` module, the simplest use of
this package for debugging is to call ``printout()`` to print the
loggers, filters, and handlers that your application has configured::

    >>> logging.getLogger('a')
    >>> logging.getLogger('a.b').setLevel(logging.DEBUG)
    >>> logging.getLogger('x.c')
    >>> from logging_tree import printout
    >>> printout()
    <--""
       Level WARNING
       |
       o<--"a"
       |   Level NOTSET so inherits level WARNING
       |   |
       |   o<--"a.b"
       |       Level DEBUG
       |
       o<--[x]
           |
           o<--"x.c"
               Level NOTSET so inherits level WARNING

If you instead want to write the tree diagram to a file, stream, or
other file-like object, use::

    file_object.write(logging_tree.format.build_description())

The logger tree should always print successfully, no matter how
complicated.  A node whose ``[name]`` is in square brackets is a "place
holder" that has never actually been named in a ``getLogger()`` call,
but was created automatically to serve as the parent of loggers further
down the tree.

There are several interfaces that ``logging_tree`` supports, depending
on how much detail you need.

``logging_tree.printout(node=None)``

    Prints the current logger tree, or the tree based at the given
    `node`, to the standard output.

``logging_tree.format.build_description(node=None)``

    Builds and returns the multi-line description of the current logger
    tree, or the tree based at the given ``node``, as a single string
    with newlines inside and a newline at the end.

``logging_tree.format.describe(node)``

    A generator that yields a series of lines that describe the tree
    based at the given ``node``.  Note that the lines are returned
    without newline terminators attached.

``logging_tree.tree()``

    Fetch the current tree of loggers from the ``logging`` module.
    Returns a node, that is simply a tuple with three fields:

    | ``[0]`` the logger name (``""`` for the root logger).
    | ``[1]`` the ``logging.Logger`` object itself.
    | ``[2]`` a list of zero or more child nodes.

I welcome contributions and ideas as this package matures.  You can find
the bug tracker at the `repository page on github
<https://github.com/brandon-rhodes/logging_tree>`_.  Developers can run
this package's tests with::

    $ python -m unittest discover logging_tree

On older versions of Python you will instead have to install
``unittest2`` and use its ``unit2`` command line tool to run the tests.

Changelog
---------

**Version 1.9** - 2021 April 10
    Declare compatibility with Python 3.9.  Improve how the logging
    module's built-in ``Formatter`` class is displayed under old Python
    versions where the ``logging`` module uses old-style classes.

**Version 1.8.1** - 2020 January 26
    Adjust one test to make it pass under Python 3.8, and update the
    distribution classifiers to declare compatibility with Python
    versions through 3.8.

**Version 1.8** - 2018 August 5
    Improve the output to better explain what happens if a "parent"
    attribute has been set to None.

**Version 1.7** - 2016 January 23
    Detect whether each logger has the correct "parent" attribute and,
    if not, print where its log messages are being sent instead.

**Version 1.6** - 2015 January 8
    Fixed a crash that would occur if a custom logging Formatter was
    missing its format string attributes.

**Version 1.5** - 2014 December 24
    Handlers now display their logging level if one has been set, and
    their custom logging formatter if one has been installed.

**Version 1.4** - 2014 January 8
    Thanks to a contribution from Dave Brondsema, disabled loggers are
    now actually marked as "Disabled" to make it less of a surprise that
    they fail to log anything.

**Version 1.3** - 2013 October 29
    Be explicit and display the logger level ``NOTSET`` along with the
    effective level inherited from the logger's ancestors; and display
    the list of ``.filters`` of a custom logging handler even though it
    might contain custom code that ignores them.

**Version 1.2** - 2013 January 19
    Compatible with Python 3.3 thanks to @ralphbean.

**Version 1.1** - 2012 February 17
    Now compatible with 2.3 <= Python <= 3.2.

**Version 1.0** - 2012 February 13
    Can display the handler inside a MemoryHandler; entire public
    interface documented; 100% test coverage.

**Version 0.6** - 2012 February 10
    Added a display format for every ``logging.handlers`` class.

**Version 0.5** - 2012 February 8
    Initial release.


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/brandon-rhodes/logging_tree",
    "name": "logging_tree",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "Brandon Rhodes",
    "author_email": "brandon@rhodesmill.org",
    "download_url": "https://files.pythonhosted.org/packages/5f/a0/dd8eb43cdcc6354815f72aedcf6f92f61b7ea22f646a74395879f4948fea/logging_tree-1.9.tar.gz",
    "platform": "",
    "description": "Introspection for the ``logging`` logger tree in the Standard Library.\n\nYou can install this package with the standard ``pip`` command::\n\n    $ pip install logging_tree\n\nWhile you can write programs that call this package's ``tree()``\nfunction and examine the hierarchy of logger objects that it finds\ninside of the Standard Library ``logging`` module, the simplest use of\nthis package for debugging is to call ``printout()`` to print the\nloggers, filters, and handlers that your application has configured::\n\n    >>> logging.getLogger('a')\n    >>> logging.getLogger('a.b').setLevel(logging.DEBUG)\n    >>> logging.getLogger('x.c')\n    >>> from logging_tree import printout\n    >>> printout()\n    <--\"\"\n       Level WARNING\n       |\n       o<--\"a\"\n       |   Level NOTSET so inherits level WARNING\n       |   |\n       |   o<--\"a.b\"\n       |       Level DEBUG\n       |\n       o<--[x]\n           |\n           o<--\"x.c\"\n               Level NOTSET so inherits level WARNING\n\nIf you instead want to write the tree diagram to a file, stream, or\nother file-like object, use::\n\n    file_object.write(logging_tree.format.build_description())\n\nThe logger tree should always print successfully, no matter how\ncomplicated.  A node whose ``[name]`` is in square brackets is a \"place\nholder\" that has never actually been named in a ``getLogger()`` call,\nbut was created automatically to serve as the parent of loggers further\ndown the tree.\n\nThere are several interfaces that ``logging_tree`` supports, depending\non how much detail you need.\n\n``logging_tree.printout(node=None)``\n\n    Prints the current logger tree, or the tree based at the given\n    `node`, to the standard output.\n\n``logging_tree.format.build_description(node=None)``\n\n    Builds and returns the multi-line description of the current logger\n    tree, or the tree based at the given ``node``, as a single string\n    with newlines inside and a newline at the end.\n\n``logging_tree.format.describe(node)``\n\n    A generator that yields a series of lines that describe the tree\n    based at the given ``node``.  Note that the lines are returned\n    without newline terminators attached.\n\n``logging_tree.tree()``\n\n    Fetch the current tree of loggers from the ``logging`` module.\n    Returns a node, that is simply a tuple with three fields:\n\n    | ``[0]`` the logger name (``\"\"`` for the root logger).\n    | ``[1]`` the ``logging.Logger`` object itself.\n    | ``[2]`` a list of zero or more child nodes.\n\nI welcome contributions and ideas as this package matures.  You can find\nthe bug tracker at the `repository page on github\n<https://github.com/brandon-rhodes/logging_tree>`_.  Developers can run\nthis package's tests with::\n\n    $ python -m unittest discover logging_tree\n\nOn older versions of Python you will instead have to install\n``unittest2`` and use its ``unit2`` command line tool to run the tests.\n\nChangelog\n---------\n\n**Version 1.9** - 2021 April 10\n    Declare compatibility with Python 3.9.  Improve how the logging\n    module's built-in ``Formatter`` class is displayed under old Python\n    versions where the ``logging`` module uses old-style classes.\n\n**Version 1.8.1** - 2020 January 26\n    Adjust one test to make it pass under Python 3.8, and update the\n    distribution classifiers to declare compatibility with Python\n    versions through 3.8.\n\n**Version 1.8** - 2018 August 5\n    Improve the output to better explain what happens if a \"parent\"\n    attribute has been set to None.\n\n**Version 1.7** - 2016 January 23\n    Detect whether each logger has the correct \"parent\" attribute and,\n    if not, print where its log messages are being sent instead.\n\n**Version 1.6** - 2015 January 8\n    Fixed a crash that would occur if a custom logging Formatter was\n    missing its format string attributes.\n\n**Version 1.5** - 2014 December 24\n    Handlers now display their logging level if one has been set, and\n    their custom logging formatter if one has been installed.\n\n**Version 1.4** - 2014 January 8\n    Thanks to a contribution from Dave Brondsema, disabled loggers are\n    now actually marked as \"Disabled\" to make it less of a surprise that\n    they fail to log anything.\n\n**Version 1.3** - 2013 October 29\n    Be explicit and display the logger level ``NOTSET`` along with the\n    effective level inherited from the logger's ancestors; and display\n    the list of ``.filters`` of a custom logging handler even though it\n    might contain custom code that ignores them.\n\n**Version 1.2** - 2013 January 19\n    Compatible with Python 3.3 thanks to @ralphbean.\n\n**Version 1.1** - 2012 February 17\n    Now compatible with 2.3 <= Python <= 3.2.\n\n**Version 1.0** - 2012 February 13\n    Can display the handler inside a MemoryHandler; entire public\n    interface documented; 100% test coverage.\n\n**Version 0.6** - 2012 February 10\n    Added a display format for every ``logging.handlers`` class.\n\n**Version 0.5** - 2012 February 8\n    Initial release.\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Introspect and display the logger tree inside \"logging\"",
    "version": "1.9",
    "project_urls": {
        "Homepage": "https://github.com/brandon-rhodes/logging_tree"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "46d0abbd5ba6e41e60922c8004c2e2ec9f6c07bfe662562f63d1b325491a14da",
                "md5": "c6909abaa224878e7937df313555b95c",
                "sha256": "1aa4c74f9ae0a86d14bb1d36b2e3066324e22132e6e55200d4ecf009dba4c536"
            },
            "downloads": -1,
            "filename": "logging_tree-1.9-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c6909abaa224878e7937df313555b95c",
            "packagetype": "bdist_wheel",
            "python_version": "3.8",
            "requires_python": null,
            "size": 11805,
            "upload_time": "2021-04-10T10:08:28",
            "upload_time_iso_8601": "2021-04-10T10:08:28.788899Z",
            "url": "https://files.pythonhosted.org/packages/46/d0/abbd5ba6e41e60922c8004c2e2ec9f6c07bfe662562f63d1b325491a14da/logging_tree-1.9-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5fa0dd8eb43cdcc6354815f72aedcf6f92f61b7ea22f646a74395879f4948fea",
                "md5": "4954ea3985ec333d911cdb961f0c1640",
                "sha256": "fe78b28788c249b515d12a50417e4a96ba095582927b3601a0573886bffc1ff0"
            },
            "downloads": -1,
            "filename": "logging_tree-1.9.tar.gz",
            "has_sig": false,
            "md5_digest": "4954ea3985ec333d911cdb961f0c1640",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 8937,
            "upload_time": "2021-04-10T10:08:26",
            "upload_time_iso_8601": "2021-04-10T10:08:26.948950Z",
            "url": "https://files.pythonhosted.org/packages/5f/a0/dd8eb43cdcc6354815f72aedcf6f92f61b7ea22f646a74395879f4948fea/logging_tree-1.9.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2021-04-10 10:08:26",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "brandon-rhodes",
    "github_project": "logging_tree",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "logging_tree"
}
        
Elapsed time: 0.38692s