{ "info": { "author": "Brandon Rhodes", "author_email": "brandon@rhodesmill.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 6 - Mature", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.3", "Programming Language :: Python :: 2.4", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: System :: Logging" ], "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\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`_. 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.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", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/brandon-rhodes/logging_tree", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "logging_tree", "package_url": "https://pypi.org/project/logging_tree/", "platform": "", "project_url": "https://pypi.org/project/logging_tree/", "project_urls": { "Homepage": "https://github.com/brandon-rhodes/logging_tree" }, "release_url": "https://pypi.org/project/logging_tree/1.8/", "requires_dist": null, "requires_python": "", "summary": "Introspect and display the logger tree inside \"logging\"", "version": "1.8" }, "last_serial": 4138312, "releases": { "0.5": [ { "comment_text": "", "digests": { "md5": "daba7d6bc3438dff5a3ca35b2bd3b9dc", "sha256": "b3712f3e7e9907c8a072b140bc8a30de7b403dd2d75720bc665ce3ddaed2d4ed" }, "downloads": -1, "filename": "logging_tree-0.5.tar.gz", "has_sig": false, "md5_digest": "daba7d6bc3438dff5a3ca35b2bd3b9dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3117, "upload_time": "2012-02-08T15:45:55", "url": "https://files.pythonhosted.org/packages/6d/31/f08c175e6270ec526312b6e6f64a895ca9ade141876a893b6916bdd36298/logging_tree-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "a43de209ba30b3d207e0639e9c83a714", "sha256": "463b50bf2c3af5bc929ce01375a4fe7643acb8a28c7bedc66521771e06e75186" }, "downloads": -1, "filename": "logging_tree-0.6.tar.gz", "has_sig": false, "md5_digest": "a43de209ba30b3d207e0639e9c83a714", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4784, "upload_time": "2012-02-11T02:35:30", "url": "https://files.pythonhosted.org/packages/ba/e1/112f877c6210fc7f6e085d50fa3775431fb7856aa25c09dbd9772ae01e6b/logging_tree-0.6.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "d3a3698c5b23c18ae3b6f2d4e77c04ad", "sha256": "9b16d8dc1e2395372ac828db5c8eab24665458ace5716ed5408cd1976dac9229" }, "downloads": -1, "filename": "logging_tree-1.0.tar.gz", "has_sig": false, "md5_digest": "d3a3698c5b23c18ae3b6f2d4e77c04ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5368, "upload_time": "2012-02-14T04:59:10", "url": "https://files.pythonhosted.org/packages/6b/a4/9d42932fe0c3c173ca43cd7cad5d9b96e0d25500d573351fc1062a25a907/logging_tree-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "69d05f3a39b37bf036e3f2037cfdf03d", "sha256": "89b808711be30a846c88e37a56a3320f9dbb4e752ab860cd4f4ce055a2c81b18" }, "downloads": -1, "filename": "logging_tree-1.1.tar.gz", "has_sig": false, "md5_digest": "69d05f3a39b37bf036e3f2037cfdf03d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5928, "upload_time": "2012-02-17T06:51:23", "url": "https://files.pythonhosted.org/packages/13/44/bba3291dda3b390f14674e48545a8b0e4c7109dbcab97d951b0fe677245b/logging_tree-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "707165cee5d18b4ba7ef06d274f57bf1", "sha256": "f950dfea3b12c274d4ace3b7ae490567ae485ef85414377ab50d0ae5a57e0e8b" }, "downloads": -1, "filename": "logging_tree-1.2.tar.gz", "has_sig": false, "md5_digest": "707165cee5d18b4ba7ef06d274f57bf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6825, "upload_time": "2013-01-19T15:58:10", "url": "https://files.pythonhosted.org/packages/36/fb/0ee82f052d1e4908373778d38a4c0fa5c78fc3ffc06b957316b6990329c3/logging_tree-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "0d2e03968af488276c2c9f2ee11dcbb5", "sha256": "1d65fc8b1553202b01fe0eafa30dd9555ba8209eef1d35e2c4746b48f4650c52" }, "downloads": -1, "filename": "logging_tree-1.3.tar.gz", "has_sig": false, "md5_digest": "0d2e03968af488276c2c9f2ee11dcbb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7009, "upload_time": "2013-10-29T22:49:17", "url": "https://files.pythonhosted.org/packages/5c/35/9d24b4ff83ab634dd6f19d3a819eacc2a5a8dccad4af4f320a93e67e7433/logging_tree-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "8a18c4192056ae48e963383a88444da8", "sha256": "5567a8576789732275b98fc5ae38f29f1988d6319e01f28301d58ecf90ab2ccc" }, "downloads": -1, "filename": "logging_tree-1.4.tar.gz", "has_sig": false, "md5_digest": "8a18c4192056ae48e963383a88444da8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7071, "upload_time": "2014-01-08T18:08:03", "url": "https://files.pythonhosted.org/packages/90/6a/7f95d3f553d90b869b4e7521316c2de521fb6d47194aabaf77b30ace3c81/logging_tree-1.4.tar.gz" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "209ab116c6b2c83995b50100435f5416", "sha256": "5ee15b23bc67cbc02805c9f82216ba1f52f41c0e28f0571017e1fab790359e5b" }, "downloads": -1, "filename": "logging_tree-1.5.tar.gz", "has_sig": false, "md5_digest": "209ab116c6b2c83995b50100435f5416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7403, "upload_time": "2014-12-24T21:27:59", "url": "https://files.pythonhosted.org/packages/a7/97/3bb6dabb02580c277004a8ef8dbec1d21527675cd23e1da16109701674c2/logging_tree-1.5.tar.gz" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "33ef7eaa1533a50cf67ed1c49a48cfdd", "sha256": "325b8d0c0d523a32aff63bdf08d7b679c40dba9f2ee260945108a6af894cace0" }, "downloads": -1, "filename": "logging_tree-1.6.tar.gz", "has_sig": false, "md5_digest": "33ef7eaa1533a50cf67ed1c49a48cfdd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7540, "upload_time": "2015-01-09T06:59:31", "url": "https://files.pythonhosted.org/packages/c7/1a/98c5e60c8e21c25286c3f399669c90d6bd3dda49ce1372a5014452021aad/logging_tree-1.6.tar.gz" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "f20d144ca1ec2cfb2aab463edba82d49", "sha256": "97756f25f5e9dabe9f20a1bb3b7e9c35bfef58e284f775c9765294a763ab5744" }, "downloads": -1, "filename": "logging_tree-1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "f20d144ca1ec2cfb2aab463edba82d49", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10969, "upload_time": "2018-08-05T19:47:00", "url": "https://files.pythonhosted.org/packages/3b/df/6b06b2aaa16c944c538bee596bc10f5208a98ccfd765e5de62766a6271c0/logging_tree-1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21d8a0408402022af416dee0e1101a67", "sha256": "3df68a170f30386e58bbea330d27c6a6ce88681919b35080deac8ec69458973e" }, "downloads": -1, "filename": "logging_tree-1.7.tar.gz", "has_sig": false, "md5_digest": "21d8a0408402022af416dee0e1101a67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8081, "upload_time": "2016-01-23T17:43:14", "url": "https://files.pythonhosted.org/packages/31/64/d014398666f51237f8213c4b55f0c025a61ffaba72cfa567e4d761ecb8da/logging_tree-1.7.tar.gz" } ], "1.8": [ { "comment_text": "", "digests": { "md5": "4b8cb66287961da96f1898f9f84170b7", "sha256": "668c5c364f4623e81784e6042e82fb87d9423bd291a68933c7a3c03e72f4f343" }, "downloads": -1, "filename": "logging_tree-1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b8cb66287961da96f1898f9f84170b7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 11157, "upload_time": "2018-08-05T20:15:28", "url": "https://files.pythonhosted.org/packages/c8/c2/ef440ebd44b0106a3b49026e0191a78fc1bfd4daf24aaa4f68d1901b6763/logging_tree-1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "749ca9fea3bc5e2f3d3c0cf8f9bb39de", "sha256": "dc6cf63f2f8e7805dad32b3400fb9685c9d3cf83bd0f0e99267e426b9cf72694" }, "downloads": -1, "filename": "logging_tree-1.8.tar.gz", "has_sig": false, "md5_digest": "749ca9fea3bc5e2f3d3c0cf8f9bb39de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9240, "upload_time": "2018-08-05T20:15:27", "url": "https://files.pythonhosted.org/packages/6d/4a/17b0bf13bf8d0ec7df1ec54ded2a96689e7559f0a79b269087f34455ae3b/logging_tree-1.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4b8cb66287961da96f1898f9f84170b7", "sha256": "668c5c364f4623e81784e6042e82fb87d9423bd291a68933c7a3c03e72f4f343" }, "downloads": -1, "filename": "logging_tree-1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b8cb66287961da96f1898f9f84170b7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 11157, "upload_time": "2018-08-05T20:15:28", "url": "https://files.pythonhosted.org/packages/c8/c2/ef440ebd44b0106a3b49026e0191a78fc1bfd4daf24aaa4f68d1901b6763/logging_tree-1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "749ca9fea3bc5e2f3d3c0cf8f9bb39de", "sha256": "dc6cf63f2f8e7805dad32b3400fb9685c9d3cf83bd0f0e99267e426b9cf72694" }, "downloads": -1, "filename": "logging_tree-1.8.tar.gz", "has_sig": false, "md5_digest": "749ca9fea3bc5e2f3d3c0cf8f9bb39de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9240, "upload_time": "2018-08-05T20:15:27", "url": "https://files.pythonhosted.org/packages/6d/4a/17b0bf13bf8d0ec7df1ec54ded2a96689e7559f0a79b269087f34455ae3b/logging_tree-1.8.tar.gz" } ] }