{ "info": { "author": "Caleb Hattingh", "author_email": "caleb.hattingh@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": ".. image:: https://travis-ci.org/cjrh/aiologfields.svg?branch=master\n :target: https://travis-ci.org/cjrh/aiologfields\n\n.. image:: https://coveralls.io/repos/github/cjrh/aiologfields/badge.svg?branch=master\n :target: https://coveralls.io/github/cjrh/aiologfields?branch=master\n\n.. image:: https://img.shields.io/pypi/pyversions/aiologfields.svg\n :target: https://pypi.python.org/pypi/aiologfields\n\n.. image:: https://img.shields.io/github/tag/cjrh/aiologfields.svg\n :target: https://img.shields.io/github/tag/cjrh/aiologfields.svg\n\n.. image:: https://img.shields.io/badge/install-pip%20install%20aiologfields-ff69b4.svg\n :target: https://img.shields.io/badge/install-pip%20install%20aiologfields-ff69b4.svg\n\n.. image:: https://img.shields.io/pypi/v/aiologfields.svg\n :target: https://img.shields.io/pypi/v/aiologfields.svg\n\n.. image:: https://img.shields.io/badge/calver-YYYY.MM.MINOR-22bfda.svg\n :target: http://calver.org/\n\n\naiologfields\n======================\n\n``aiologfields`` makes it easy to include **correlation IDs**, as well\nas other contextual information into log messages, across ``await``\ncalls and ``loop.create_task()`` calls. Correlation IDs are critically\nimportant for accurate telemetry in monitoring and debugging distributed\nmicroservices.\n\nInstructions\n------------\n\nIt couldn't be easier:\n\n.. code-block:: python\n\n aiologfields.install()\n\nAfter this, *every single task* created will have a ``logging_fields``\nattribute. To add a field to a ``LogRecord``, simply apply it to any task:\n\n.. code-block:: python\n\n t = loop.create_task(coro)\n t.logging_fields.correlation_id = '12345'\n\nIf you're using a logging handler that produces JSON output\n(like ``logjson``!), or some other formatter that produces output with\nall fields in the ``LogRecord``, you will find that each record within the\ncontext of the task will include an additional field called ``correlation_id``\nwith a value of ``12345``.\n\nDemo\n----\n\nThis is adapted from one of the tests:\n\n.. code-block:: python\n\n aiologfields.install()\n correlation_id = str(uuid4())\n logger = logging.getLogger('blah')\n\n async def cf2():\n logger.info('blah blah')\n\n async def cf1():\n ct = asyncio.Task.current_task()\n ct.logging_fields.correlation_id = correlation_id\n await cf2()\n\n loop.run_until_complete(cf1())\n\nIn the ``LogRecord`` produced inside ``cf2()``, an additional field\n``correlation_id`` is included, even though the field was set in\ncoroutine function ``cf1()``.\n\nIt would also have worked if ``cf2()`` had been executed in a separate\ntask itself, since the ``logging_fields`` namespace is copied between\nnested tasks.\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cjrh/aiologfields", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "aiologfields", "package_url": "https://pypi.org/project/aiologfields/", "platform": "", "project_url": "https://pypi.org/project/aiologfields/", "project_urls": { "Homepage": "https://github.com/cjrh/aiologfields" }, "release_url": "https://pypi.org/project/aiologfields/2018.9.1/", "requires_dist": [ "pytest; extra == \"dev\"", "pytest-cov; extra == \"dev\"" ], "requires_python": "", "summary": "aiologfields: inject Task-context-fields into loggers", "version": "2018.9.1" }, "last_serial": 4276182, "releases": { "2017.12.1": [ { "comment_text": "", "digests": { "md5": "fbc433b1b3b9cd561af27a3e21cfef44", "sha256": "a3452f15e283bffb786c71eb4229a03cc3d2064270fb17a712f736dd00b8a9fe" }, "downloads": -1, "filename": "aiologfields-2017.12.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbc433b1b3b9cd561af27a3e21cfef44", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16942, "upload_time": "2017-12-09T12:04:43", "url": "https://files.pythonhosted.org/packages/e3/25/c4f10b176bb119431ddb8b37afb173814dae843423af948a2142d33028de/aiologfields-2017.12.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68f607a6aca018c4306085ba42275cdc", "sha256": "8033db6a660acbfd5619b73a11fbb7cb3c66bf7b6634b639d4ed1e2bc31bb4a4" }, "downloads": -1, "filename": "aiologfields-2017.12.1.tar.gz", "has_sig": false, "md5_digest": "68f607a6aca018c4306085ba42275cdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8309, "upload_time": "2017-12-09T12:04:46", "url": "https://files.pythonhosted.org/packages/f9/6e/fbf411bd84af650315883a9ad61b1ff2e57b6582a1822bddfe434dec96ae/aiologfields-2017.12.1.tar.gz" } ], "2017.12.2": [ { "comment_text": "", "digests": { "md5": "b49ffd0be9263326dcd36caef9cfb6dd", "sha256": "93f47173d321c691fca07fd60266e812cabb7c995d37869a960a23d7c7545a92" }, "downloads": -1, "filename": "aiologfields-2017.12.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b49ffd0be9263326dcd36caef9cfb6dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17676, "upload_time": "2017-12-12T22:39:39", "url": "https://files.pythonhosted.org/packages/d9/b9/6c66155539720f43d03b07159f6ec68fdec64a2967ef8bce32d5d9679946/aiologfields-2017.12.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ced40002f16a9ec07a8b469ae8e5c70", "sha256": "b49eec9551af8bbcade7a39ccd221288e6935ecb5fff46c080486f428e0fbc66" }, "downloads": -1, "filename": "aiologfields-2017.12.2.tar.gz", "has_sig": false, "md5_digest": "8ced40002f16a9ec07a8b469ae8e5c70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8757, "upload_time": "2017-12-12T22:39:43", "url": "https://files.pythonhosted.org/packages/af/d8/04171a279c4fc94d79ff93eb19ccebf002e290d6f0bce1caac77797a0e21/aiologfields-2017.12.2.tar.gz" } ], "2018.4.1": [ { "comment_text": "", "digests": { "md5": "e8ae6f44ea450d30b1c452992be8b320", "sha256": "21270bf97f8f93724845a152fc14cb5821d0f7d4b68e1315ea1b296b2f639f49" }, "downloads": -1, "filename": "aiologfields-2018.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8ae6f44ea450d30b1c452992be8b320", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17670, "upload_time": "2018-04-16T05:08:45", "url": "https://files.pythonhosted.org/packages/a7/2b/4f26128ae49dfe9771e253a4343bef4513ec76c02872232225ae27735a76/aiologfields-2018.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ec2bb1beeeb34e98e8f1157e7841de7", "sha256": "8ff3a71287a8b3c541e4152950c7af50931d4f9a8e57f81a4569277688cdf244" }, "downloads": -1, "filename": "aiologfields-2018.4.1.tar.gz", "has_sig": false, "md5_digest": "2ec2bb1beeeb34e98e8f1157e7841de7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8758, "upload_time": "2018-04-16T05:08:47", "url": "https://files.pythonhosted.org/packages/f3/aa/87e62e9077c2623c83564de6a6d26709abecc6ec8b5a2e5e264953ef1bc3/aiologfields-2018.4.1.tar.gz" } ], "2018.8.1": [ { "comment_text": "", "digests": { "md5": "7252f04c557c250c40a1cfd715b68319", "sha256": "2cabac91441251a9b53433bdf673cbe5c0ff9edb9d18da5245483bbe5f76ed4a" }, "downloads": -1, "filename": "aiologfields-2018.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7252f04c557c250c40a1cfd715b68319", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17674, "upload_time": "2018-08-17T09:02:04", "url": "https://files.pythonhosted.org/packages/41/f8/7a3b401ee1eaeb471a73df8bbfe3de8d98085494822ed90593878d189831/aiologfields-2018.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5fc2f882f6c85d97adea6b5fcdce46d0", "sha256": "f271357c85bef4d0c68e3bb2a41419c5810f6f59acf577b36fbfb2ff7d8ad835" }, "downloads": -1, "filename": "aiologfields-2018.8.1.tar.gz", "has_sig": false, "md5_digest": "5fc2f882f6c85d97adea6b5fcdce46d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8784, "upload_time": "2018-08-17T09:02:08", "url": "https://files.pythonhosted.org/packages/34/2e/2e6e1ed7f07f909e82803def787f4e9e7f9153301656329060af487ac05a/aiologfields-2018.8.1.tar.gz" } ], "2018.8.2": [ { "comment_text": "", "digests": { "md5": "d8dedbdb380dcc6dea0b9f081f764668", "sha256": "c5e03ee2b6294c3356131524978f209e77707a552b270eca917da6ab52f8c35e" }, "downloads": -1, "filename": "aiologfields-2018.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8dedbdb380dcc6dea0b9f081f764668", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17901, "upload_time": "2018-08-21T04:02:06", "url": "https://files.pythonhosted.org/packages/1d/5d/feee6f81438f34a9f357486f201a30dcc6de1f500fb970684c61577f132a/aiologfields-2018.8.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe23aee874efab9cc7e0510cba0f91b4", "sha256": "17f2ea543563589347d461eeb45b371132ec4e1fca94647577b1a0922f36731b" }, "downloads": -1, "filename": "aiologfields-2018.8.2.tar.gz", "has_sig": false, "md5_digest": "fe23aee874efab9cc7e0510cba0f91b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8875, "upload_time": "2018-08-21T04:02:09", "url": "https://files.pythonhosted.org/packages/36/1b/8ba49fc8cc850ae35b9f037eedef7ddae261c4f5f5dc7685a56eb448f16c/aiologfields-2018.8.2.tar.gz" } ], "2018.9.1": [ { "comment_text": "", "digests": { "md5": "c3ef0f29b4dae2e20b4261cf14640f28", "sha256": "8ce7dab62aacd990f282879c8d6008a83e247f0954ab9712a076b9423f195a94" }, "downloads": -1, "filename": "aiologfields-2018.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c3ef0f29b4dae2e20b4261cf14640f28", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18178, "upload_time": "2018-09-16T09:20:51", "url": "https://files.pythonhosted.org/packages/89/3a/af18d224f420596e446848aa3ca381bde22a4ac151f7bbcf4f2276de5765/aiologfields-2018.9.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa8a9f67199bb1ac7509db3d268914be", "sha256": "d32426530878f17ed950e7d963927173f237c1bd8b824d99c1f08037e9c4ec83" }, "downloads": -1, "filename": "aiologfields-2018.9.1.tar.gz", "has_sig": false, "md5_digest": "aa8a9f67199bb1ac7509db3d268914be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9038, "upload_time": "2018-09-16T09:20:56", "url": "https://files.pythonhosted.org/packages/b7/3c/c1f903edd1beb8c5e662f7893cc306fd7604b3fe87eb04c7941f60df16e1/aiologfields-2018.9.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c3ef0f29b4dae2e20b4261cf14640f28", "sha256": "8ce7dab62aacd990f282879c8d6008a83e247f0954ab9712a076b9423f195a94" }, "downloads": -1, "filename": "aiologfields-2018.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c3ef0f29b4dae2e20b4261cf14640f28", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18178, "upload_time": "2018-09-16T09:20:51", "url": "https://files.pythonhosted.org/packages/89/3a/af18d224f420596e446848aa3ca381bde22a4ac151f7bbcf4f2276de5765/aiologfields-2018.9.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa8a9f67199bb1ac7509db3d268914be", "sha256": "d32426530878f17ed950e7d963927173f237c1bd8b824d99c1f08037e9c4ec83" }, "downloads": -1, "filename": "aiologfields-2018.9.1.tar.gz", "has_sig": false, "md5_digest": "aa8a9f67199bb1ac7509db3d268914be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9038, "upload_time": "2018-09-16T09:20:56", "url": "https://files.pythonhosted.org/packages/b7/3c/c1f903edd1beb8c5e662f7893cc306fd7604b3fe87eb04c7941f60df16e1/aiologfields-2018.9.1.tar.gz" } ] }