{ "info": { "author": "Keith Yang", "author_email": "yang@keitheis.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: System :: Logging" ], "description": "Alog\n====\n\n.. image:: https://travis-ci.org/keitheis/alog.svg?branch=master\n :target: https://travis-ci.org/keitheis/alog\n\n.. image:: https://codecov.io/gh/keitheis/alog/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/keitheis/alog\n\n.. image:: http://img.shields.io/pypi/v/alog.svg?style=flat\n :target: https://pypi.org/pypi/alog\n\nYour goto Python logging without panic on context swtich.\n\n**Warning:** No more ``logger = logging.getLogger(__name__)`` in your every file.\n\n.. code-block:: python\n\n >>> import alog\n >>> alog.info(\"Hi.\")\n 2016-12-18 20:44:30 INFO Hi.\n >>> def test():\n ... alog.info(\"Test 1\")\n ... alog.error(\"Test 2\")\n ...\n >>> test()\n 2016-12-18 20:45:19 INFO Test 1\n 2016-12-18 20:45:19 ERROR Test 2\n >>> alog.set_level(\"ERROR\")\n >>> test()\n 2016-12-18 20:45:41 ERROR Test 2\n\nIf you're new to logging, see `Why should you use logging instead of print`_.\n\nInstallation\n------------\n\n.. code-block::\n\n pip install alog\n\nFeatures \n--------\n\n- Instant logging with expected defaults.\n\n You can do logging instantly by reading a small piece of README.\n Alog comes with useful defaults:\n\n - A default logger.\n - Logging level: ``logging.INFO``\n - Logging format::\n\n \"%(asctime)s %(levelname)-5.5s [parent_module.current_module:%(lineno)s]%(message)s\",\n \"%Y-%m-%d %H:%M:%S\"\n\n- No more **__name__** whenever you start to do logging in a module.\n\n Alog builds the default module names on the fly. \n\n- Compatible with default Python ``logging`` module.\n\n Alog is built upon default Python logging module. You can configure it by\n the same way of default Python logging module when it's needed.\n\n\nComparing ``alog`` with Python default ``logging`` module\n---------------------------------------------------------\n\nComparing ``alog`` :\n\n.. code-block:: python\n\n In [1]: import alog\n\n In [2]: alog.info(\"Hello alog!\")\n 2016-11-23 12:20:34 INFO Hello alog!\n\nwith ``logging`` module:\n\n.. code-block:: python\n\n In [1]: import logging\n\n In [2]: logging.basicConfig(\n ...: level=logging.INFO,\n ...: format=\"%(asctime)s %(levelname)-5.5s \"\n ...: \"[%(name)s:%(lineno)s] %(message)s\")\n\n In [3]: # In every file you want to do log, otherwise %(names)s won't work.\n In [4]: logger = logging.getLogger(__name__)\n\n In [5]: logger.info(\"Hello log!\")\n 2016-11-23 12:16:30 INFO [__main__:1] Hello log!\n\n\nTips\n----\n\n.. code-block:: python\n\n import alog\n\n a_complex_json_dict = {...} # or a_complex_dict\n alog.info(alog.pformat(a_complex_dict))\n\n restaurant = Restaurant(...)\n alog.info(alog.pdir(restaurant))\n # or just skip attributes starts with \"__\":\n alog.info(alog.pdir(restaurant, str_not_startswith=\"__\"))\n # instead of\n alog.info([attr for attr in dir(restaurant) if attr.startswith(\"_\")])\n\n # Play threads?\n alog.turn_logging_thread_name(on=True)\n # Processes?\n alog.turn_logging_process_id(on=True)\n # No datetime wanted?\n alog.turn_logging_datetime(on=False)\n\nWhy should you use logging instead of print\n-------------------------------------------\n\nThe main goal of logging is to figure out what was going on and to get the\ninsight. ``print``, by default, does simply pure string output. No timestamp,\nno module hint, and no level control, comparing to a pretty logging record.\n\nLets start with ``aproject/models/user.py`` :\n\n.. code-block:: python\n\n class User:\n def __init__(self, user_id, username):\n ...\n print(username)\n ...\n\nWhat you got output of ``print`` :\n\n.. code-block:: python\n\n >>> admin = User(1, \"admin\")\n \"admin\"\n\n\nNow use ``alog`` :\n\n.. code-block:: python\n\n import alog\n\n class User:\n def __init__(self, user_id, username):\n ...\n alog.info(username)\n ...\n\nWhat you got output of ``alog.info`` :\n\n.. code-block:: python\n\n >>> admin = User(1, \"admin\")\n 2016-11-23 11:32:58 INFO [models.user:6] admin\n\nIn the output of hundreds of lines, it helps (a lot).\n\nWhat if you have used ``print`` a log? That's as easy:\n\n.. code-block:: python\n\n import alog\n\n print = alog.info\n\n ... # A lot of print code no needed to change\n\n\n(Unrelease)\n===================\n\n1.0.0 (2019-04-03)\n==================\n\n - Renamed:\n\n - ``turn_logging_datetime(on=True)``\n - ``turn_logging_thread_name(on=False)``\n - ``turn_logging_process_id(on=False)``\n\n - Support most same APIs between alog and Alogger.\n - Add ``alog.pdir()`` for handy replacing ``[attr for attr in dir(obj)\n if not attr.startswith(\"_\")]``.\n\n0.9.13 (2017-06-18)\n===================\n\n - Fix not able to ``turn_log_datetime(on=False)``.\n\n0.9.12 (2017-06-16)\n===================\n\n - Support not showing_log_datetime by ``turn_log_datetime(on=False)``.\n\n0.9.11 (2017-04-07)\n===================\n\n - Add ``alog.getLogger()`` for handy replacing ``logging.getLogger``.\n\n0.9.10 (2017-03-27)\n===================\n\n - Default logging format asctime to \"%Y-%m-%d %H:%M:%S\" instead of\n \"%Y-%m-%d,%H:%M:%S.%f\".\n - Update package info and usage (setup.py, README, ...).\n\n0.9.9 (2016-08-28)\n==================\n\n - Update to turn_thread_name and turn_process_id.\n\n0.9.8 (2016-08-27)\n==================\n\n - Support showing_thread_name and showing_process_id.\n - Support global reset.\n\n0.9.7 (2016-08-17)\n==================\n\n - Better paths log for None default root name.\n\n0.9.6 (2016-08-16)\n==================\n\n - First public release.\n\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/keitheis/alog", "keywords": "simple basic application logging print", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "alog", "package_url": "https://pypi.org/project/alog/", "platform": "", "project_url": "https://pypi.org/project/alog/", "project_urls": { "Homepage": "https://github.com/keitheis/alog" }, "release_url": "https://pypi.org/project/alog/1.0.0/", "requires_dist": [ "Sphinx (>=1.3.1); extra == 'docs'", "pytest-cov; extra == 'testing'" ], "requires_python": "", "summary": "Your goto Python logging without panic on context swtich", "version": "1.0.0" }, "last_serial": 5080210, "releases": { "0.9.10": [ { "comment_text": "", "digests": { "md5": "4708ff0b6044a4979346e3330f439074", "sha256": "08bb83f343958da71bc615b1dd0dd123763512cc4218f7786feb480667e82a36" }, "downloads": -1, "filename": "alog-0.9.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4708ff0b6044a4979346e3330f439074", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7163, "upload_time": "2017-03-27T11:37:14", "url": "https://files.pythonhosted.org/packages/b7/01/a72d3dd465887fb37c629ef308fea3ea49e3ee3bb16c01a7f0bcf0bfd1f3/alog-0.9.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ce05665a89adbf7b7e236bc2028af14", "sha256": "cd0498489ac25681b59b93df3b98a32ca5845f557653535d77fe4d8806b1727a" }, "downloads": -1, "filename": "alog-0.9.10.tar.gz", "has_sig": false, "md5_digest": "2ce05665a89adbf7b7e236bc2028af14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5002, "upload_time": "2017-03-27T11:39:22", "url": "https://files.pythonhosted.org/packages/04/f8/d25c8f3af08a8a923c4fb455cdf7e62ee4ce6c361ed7e6fef843162ae1d6/alog-0.9.10.tar.gz" } ], "0.9.11": [ { "comment_text": "", "digests": { "md5": "8a72e7225ce06ad1df86c23754a7f3a9", "sha256": "dd1f9d7fe97dfbc81c72848a4764e4597f2066b0f6414b80eff11ce9adb663e3" }, "downloads": -1, "filename": "alog-0.9.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8a72e7225ce06ad1df86c23754a7f3a9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8090, "upload_time": "2017-04-06T17:45:11", "url": "https://files.pythonhosted.org/packages/21/a7/639272c065ecb8c8d6723b56df8a40be5ccda8ff6acd660f8c7301bfec70/alog-0.9.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c7974fd13f4b98de5082b7589c180c8", "sha256": "29c186fb405bf28d02d64cdb832fb67e85e3933e88e3f05e6279d45988cb4aa9" }, "downloads": -1, "filename": "alog-0.9.11.tar.gz", "has_sig": false, "md5_digest": "9c7974fd13f4b98de5082b7589c180c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5353, "upload_time": "2017-04-06T17:45:13", "url": "https://files.pythonhosted.org/packages/2e/0c/6256425cd67d91f2374278e3e2b4e532a733f2d074ae40d88bfa9f65518b/alog-0.9.11.tar.gz" } ], "0.9.12": [ { "comment_text": "", "digests": { "md5": "ae04898c7a3e09d3e1970cb1085550be", "sha256": "8c2458a93917a4de43517e38d14f118fc07b56105f427149c31c7e9c363ba253" }, "downloads": -1, "filename": "alog-0.9.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ae04898c7a3e09d3e1970cb1085550be", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7841, "upload_time": "2017-06-16T02:46:30", "url": "https://files.pythonhosted.org/packages/61/b4/d95ddd649c1d96cf9738677b68562ce6532d994ac31eb02b7863dbe2e8ff/alog-0.9.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c292d29d97f91f126b120d594e432e69", "sha256": "a1bfab7e8067b5fe29f4c6c8bd961e99f07e61dca3236f6d16869c89b154377a" }, "downloads": -1, "filename": "alog-0.9.12.tar.gz", "has_sig": false, "md5_digest": "c292d29d97f91f126b120d594e432e69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5348, "upload_time": "2017-06-16T02:46:32", "url": "https://files.pythonhosted.org/packages/42/a4/208c32e20658fbed76df029c74ca6ab3ac4180909c6962da4f226a696cb6/alog-0.9.12.tar.gz" } ], "0.9.13": [ { "comment_text": "", "digests": { "md5": "e847115e3cd27aedd66809df6fa4a495", "sha256": "1006396fb47c6dd0e28a829b6c8223f90ba68be0ebb3de2202e7fda0f64e7fa3" }, "downloads": -1, "filename": "alog-0.9.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e847115e3cd27aedd66809df6fa4a495", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7872, "upload_time": "2017-06-18T02:54:13", "url": "https://files.pythonhosted.org/packages/31/23/f292e8344b3943496ff4a06aa3c232c6736bcabd382672eac4e79bd1c63b/alog-0.9.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc6581e48a2599580e212c2c6474b717", "sha256": "2cc102e511dbdf79e981b7e89460a3c85218994740315a1b47f376876cd9f3b7" }, "downloads": -1, "filename": "alog-0.9.13.tar.gz", "has_sig": false, "md5_digest": "cc6581e48a2599580e212c2c6474b717", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5363, "upload_time": "2017-06-18T02:54:16", "url": "https://files.pythonhosted.org/packages/9b/0c/20576dea11901f59a358e5a294b7652afbf5d39f4f6db245f826e637f96a/alog-0.9.13.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "17ec985a901edce0e569bac422b4ca7f", "sha256": "ddfed947252371ca4b65b76107d5d4a494de9118120a205dc695719d1008575a" }, "downloads": -1, "filename": "alog-0.9.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17ec985a901edce0e569bac422b4ca7f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3383, "upload_time": "2016-08-16T10:19:00", "url": "https://files.pythonhosted.org/packages/e0/b2/8c9a1f165fd8a5cf9b0d8c51c59b4e40da9703f1db18b4b39cdf618fc9a5/alog-0.9.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c743ab88fb8b175e9b6ab37022882fd6", "sha256": "2e9ac3c40d03c707a837bb96186337b5814609ba22b728c68c8dde526ba3507e" }, "downloads": -1, "filename": "alog-0.9.6.tar.gz", "has_sig": false, "md5_digest": "c743ab88fb8b175e9b6ab37022882fd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2581, "upload_time": "2016-08-16T10:19:03", "url": "https://files.pythonhosted.org/packages/6e/67/77f3ffb08c9634bbce89e133c75295ab782757d407b78e4e66f90df74add/alog-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "307598118beb6ade04b34c06db8b5292", "sha256": "5f3b1a8d4668679c2663c8609b8d6b3b223eded76362a868c57936af88f81662" }, "downloads": -1, "filename": "alog-0.9.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "307598118beb6ade04b34c06db8b5292", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3408, "upload_time": "2016-08-17T15:15:56", "url": "https://files.pythonhosted.org/packages/c5/fe/e66eaa17a390dd555fbc4bcc0377d31edeaf6e66bae5dfd763bd38623850/alog-0.9.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9e74ab31291b1ef3b9a4b197855d556", "sha256": "9d59c9d1239205eba7c26b83bfc54a1a41d5fdefe32998626eb72a5becbc229c" }, "downloads": -1, "filename": "alog-0.9.7.tar.gz", "has_sig": false, "md5_digest": "e9e74ab31291b1ef3b9a4b197855d556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2606, "upload_time": "2016-08-17T15:16:00", "url": "https://files.pythonhosted.org/packages/e6/31/904898ce4cbdd23e7009e00de5eb582e5ccb37fe1ab60c76b0ac479b9039/alog-0.9.7.tar.gz" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "514f9c50a7c51becfaa3c2414c04fa48", "sha256": "5983f2fd04457c9c8970cc0a68f5cf0b2a8147ab19cc3780f0ee25eebddb4205" }, "downloads": -1, "filename": "alog-0.9.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "514f9c50a7c51becfaa3c2414c04fa48", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6826, "upload_time": "2016-08-27T08:50:23", "url": "https://files.pythonhosted.org/packages/e9/97/eef0350cd67cc6abcf709ef9f11ada9e819be0b55194c654f92894e6266e/alog-0.9.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00f3ddc61d9816960b76bad0dd447b79", "sha256": "c61880edc6e8931b49e48ce665946b4537a6156688b0b2e90d809bdc194dc208" }, "downloads": -1, "filename": "alog-0.9.8.tar.gz", "has_sig": false, "md5_digest": "00f3ddc61d9816960b76bad0dd447b79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6031, "upload_time": "2016-08-27T08:50:28", "url": "https://files.pythonhosted.org/packages/79/9d/f0e32ae43a0ba180b718134f9cd5324a5ac390df5d571bdac1e3da715f1e/alog-0.9.8.tar.gz" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "f1f6b2a1821eaf692a462bb29947f0ae", "sha256": "5d2f65e3439e5a2c4e7c231eb3c3519c661f2fc1d4ccb9f8c4ad939a57677cd6" }, "downloads": -1, "filename": "alog-0.9.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f1f6b2a1821eaf692a462bb29947f0ae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6825, "upload_time": "2016-08-28T15:16:45", "url": "https://files.pythonhosted.org/packages/ca/63/4a63b72d8faedbbf01d445edcfdcf89abcd8aca2a9c28d26ce52bd6541a5/alog-0.9.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff68cdd648747b3cc9a10cd6abf58201", "sha256": "165c185a4e38fdf919b706e294bb63a432a678c4322ca88fd0d85a5ade07ac94" }, "downloads": -1, "filename": "alog-0.9.9.tar.gz", "has_sig": false, "md5_digest": "ff68cdd648747b3cc9a10cd6abf58201", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6104, "upload_time": "2016-08-28T15:16:48", "url": "https://files.pythonhosted.org/packages/e5/04/8dde7291e555ba4edb7bc1952f5492ffc9c50cf488342288fdaeeb88e4b3/alog-0.9.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "afc609870b3375026fc78ac3f147897f", "sha256": "efc40c5c90312af24c3bda5b23b3956955a16929711dba771f6e18a73fdfb713" }, "downloads": -1, "filename": "alog-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "afc609870b3375026fc78ac3f147897f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6516, "upload_time": "2019-04-02T19:03:15", "url": "https://files.pythonhosted.org/packages/9e/8a/2e861d15fad5729037ba571c96f06853535061d6fcf3fb3409b6a86badb3/alog-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29a8cce1b8780de9450a559935b46afa", "sha256": "b99e74fd81ff696cb1090fbcce99d1e0072c39ad43a29d4fc617b0e29c82abf7" }, "downloads": -1, "filename": "alog-1.0.0.tar.gz", "has_sig": false, "md5_digest": "29a8cce1b8780de9450a559935b46afa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6175, "upload_time": "2019-04-02T19:03:17", "url": "https://files.pythonhosted.org/packages/54/26/223df72ae3ff64cb1a7dd994c11565202dcc4b7ce1b4efd5e537ab8ec101/alog-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "afc609870b3375026fc78ac3f147897f", "sha256": "efc40c5c90312af24c3bda5b23b3956955a16929711dba771f6e18a73fdfb713" }, "downloads": -1, "filename": "alog-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "afc609870b3375026fc78ac3f147897f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6516, "upload_time": "2019-04-02T19:03:15", "url": "https://files.pythonhosted.org/packages/9e/8a/2e861d15fad5729037ba571c96f06853535061d6fcf3fb3409b6a86badb3/alog-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29a8cce1b8780de9450a559935b46afa", "sha256": "b99e74fd81ff696cb1090fbcce99d1e0072c39ad43a29d4fc617b0e29c82abf7" }, "downloads": -1, "filename": "alog-1.0.0.tar.gz", "has_sig": false, "md5_digest": "29a8cce1b8780de9450a559935b46afa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6175, "upload_time": "2019-04-02T19:03:17", "url": "https://files.pythonhosted.org/packages/54/26/223df72ae3ff64cb1a7dd994c11565202dcc4b7ce1b4efd5e537ab8ec101/alog-1.0.0.tar.gz" } ] }