{ "info": { "author": "madkote", "author_email": "madkote ", "bugtrack_url": null, "classifiers": [ "Framework :: AsyncIO", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Logging", "Topic :: Utilities" ], "description": "janus-logging\n=============\n.. image:: https://travis-ci.com/madkote/janus_logging.svg?branch=master\n :target: https://travis-ci.com/madkote/janus-logging\n.. image:: https://codecov.io/gh/madkote/janus-logging/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/madkote/janus-logging\n.. image:: https://img.shields.io/pypi/v/janus_logging.svg\n :target: https://pypi.python.org/pypi/janus-logging\n\nsync and async logging within one logger instance.\n\nInstallation\n------------\n\n.. code:: sh\n\n pip install janus-logging\n\nUsage\n-----\n\nDefault\n~~~~~~~\n\n.. code:: python\n\n import asyncio\n import logging\n import sys\n\n import janus_logging\n\n def threaded(sync_log, counter: int):\n for i in range(counter):\n sync_log.info('s-Hello #%s' % i)\n sync_log.info('s-Finished #%s' % counter)\n\n async def async_coro(async_log, counter: int):\n for i in range(counter):\n await async_log.info('aio-Hello #%s' % i)\n await async_log.info('aio-Finished #%s' % counter)\n\n #\n counter = 4\n name = 'my_janus_logger'\n level = logging.DEBUG\n stream = sys.stdout\n loop = asyncio.get_event_loop()\n #\n logger = janus_logging.JanusLogger(name=name, level=level, loop=loop, stream=stream)\n loop.run_until_complete(\n asyncio.gather(\n loop.run_in_executor(\n None,\n threaded,\n logger.logger_sync(),\n counter\n ),\n async_coro(\n logger.logger_async(),\n counter\n )\n )\n )\n logger.shutdown()\n #\n #\n loop.close()\n\nThe output of above will look like:\n\n.. code:: sh\n\n s-Hello #0\n s-Hello #1\n s-Hello #2\n aio-Hello #0\n s-Hello #3\n s-Finished #4\n aio-Hello #1\n aio-Hello #2\n aio-Hello #3\n aio-Finished #4\n\nPlease note, that the output might be different on your instance.\n\nJSON\n~~~~\n\nSimply use *fixtures*.\n\n.. code:: python\n\n import asyncio\n import logging\n import sys\n\n import janus_logging\n\n def threaded(sync_log, counter: int):\n for i in range(counter):\n sync_log.info(\n 's-Hello #%s' % i,\n extra=dict(counter=i, log_type='sync', log_status='in progress')\n )\n sync_log.info(\n 's-Finished #%s' % counter,\n extra=dict(total=counter, log_type='sync', log_status='finished')\n )\n\n\n async def async_coro(async_log, counter: int):\n for i in range(counter):\n await async_log.info(\n 'aio-Hello #%s' % i,\n extra=dict(counter=i, log_type='async', log_status='in progress')\n )\n await async_log.info(\n 'aio-Finished #%s' % counter,\n extra=dict(total=counter, log_type='async', log_status='finished')\n )\n\n #\n counter = 4\n name = 'my_janus_logger'\n level = logging.DEBUG\n stream = sys.stdout\n loop = asyncio.get_event_loop()\n #\n logger = janus_logging.JanusLogger(\n name=name,\n level=level,\n loop=loop,\n fixture=janus_logging.fixture_json,\n stream=stream,\n extra=dict(bla='blabla')\n )\n loop.run_until_complete(\n asyncio.gather(\n loop.run_in_executor(\n None,\n threaded,\n logger.logger_sync(logger_name='logger_sync'),\n counter\n ),\n async_coro(\n logger.logger_async(logger_name='logger_async'),\n counter\n )\n )\n )\n logger.shutdown()\n #\n #\n loop.close()\n\nThe output of above will look like:\n\n.. code:: sh\n\n {\"level\": \"INFO\", \"msg\": \"s-Hello #0\", \"log_type\": \"sync\", \"bla\": \"blabla\", \"logger_name\": \"logger_sync\", \"counter\": 0, \"log_status\": \"in progress\", \"logged_at\": \"2019-09-27T12:00:02.517101+02:00\", \"line_numer\": 35, \"function\": \"threaded\", \"file_path\": \"demo_janus_log.py\"}\n {\"level\": \"INFO\", \"msg\": \"aio-Hello #1\", \"log_type\": \"async\", \"logged_at\": \"2019-09-27T12:00:02.518000+02:00\", \"line_number\": 60, \"function\": \"info\", \"file_path\": \"/home/madkote/janus-logging/janus_logging/__init__.py\", \"bla\": \"blabla\", \"logger_name\": \"logger_async\", \"counter\": 1, \"log_status\": \"in progress\"}\n ...\n\nCustom\n~~~~~~\n\nIf a custom logger, formatter, handler are required, then create custom\n*fixtures* and pass them to the ``JanusLogger``.\n\n.. code:: python\n\n def fixture_custom(\n \t\tname: str,\n \t\tlevel: int,\n \t\tloop: loop: asyncio.AbstractEventLoop,\n \t\t**kwargs\n \t\t) -> logging.Logger:\n ...\n return ...\n\n logger = janus_logging.JanusLogger(\n ...,\n fixture=fixture_custom,\n ...\n )\n\nDevelopment\n-----------\n\nIssues and suggestions are welcome through *issues*\n\n\nChanges\n=======\n\n1.2.0 (2019-10-04)\n------------------\n\n- `Executor` based `AsyncLoggerAdapter` due to issues with `aiologger==0.4.0`\n\n\n1.1.1 (2019-10-01)\n------------------\n\n- Fix `SyncJsonFormatter`\n\n\n1.1.0 (2019-09-27)\n------------------\n\n- Add `AsyncNullHandler`\n\n\n\n1.0.0 (2019-09-27)\n------------------\n\n- Initial release\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/madkote/janus-logging/archive/1.2.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/madkote/janus-logging", "keywords": "async,logging,log,json,asyncio,output", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "janus-logging", "package_url": "https://pypi.org/project/janus-logging/", "platform": "any", "project_url": "https://pypi.org/project/janus-logging/", "project_urls": { "Download": "https://github.com/madkote/janus-logging/archive/1.2.0.tar.gz", "Homepage": "https://github.com/madkote/janus-logging" }, "release_url": "https://pypi.org/project/janus-logging/1.2.0/", "requires_dist": [ "aiologger (==0.4.*)", "pytest (==5.*) ; extra == 'test'", "tox (==3.*) ; extra == 'test'" ], "requires_python": ">=3.6.0", "summary": "sync and async logging within one logger instance", "version": "1.2.0" }, "last_serial": 5928725, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "fd3383afd47262ccdd00ba59105fe6c2", "sha256": "57b3f1ea505ff2384e3dc3c172b3dc3c4c797ab7cf4c85b61e052840a319afca" }, "downloads": -1, "filename": "janus_logging-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fd3383afd47262ccdd00ba59105fe6c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 6390, "upload_time": "2019-09-27T13:18:03", "url": "https://files.pythonhosted.org/packages/25/cd/124e5b104c8e5cf92b39ec3fefc3c5c07142ab89a8094d3216a042e2e097/janus_logging-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ad736897e5917e399544e7e8c69f7a6", "sha256": "15cd6eb6485353c8395c828708176dddc5ebe752b027edbcf16321c056a782ba" }, "downloads": -1, "filename": "janus-logging-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7ad736897e5917e399544e7e8c69f7a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6667, "upload_time": "2019-09-27T13:18:05", "url": "https://files.pythonhosted.org/packages/f5/49/462b56d21d48e367177a133e6aee48eaaf69fc17c503c17ad33e40549dab/janus-logging-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d3b38af148562a7fa745f43426933889", "sha256": "9512af0174914f1c8d05af47cad503b34c9809c7d0fe4fbb27c6d4293c5564fc" }, "downloads": -1, "filename": "janus_logging-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d3b38af148562a7fa745f43426933889", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 6677, "upload_time": "2019-09-27T15:38:20", "url": "https://files.pythonhosted.org/packages/6e/01/94349a62e5b7eb6a0fed6094385b43551a7eeae0f2fb2c256aa2d530e6cf/janus_logging-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6dfe4fb5de8dc62433558ddbe33f8228", "sha256": "9871ccb23cea34ccff43fa9fd163c6d0cd7db6500aad8ceeebcd6f8b1e585bbf" }, "downloads": -1, "filename": "janus-logging-1.1.0.tar.gz", "has_sig": false, "md5_digest": "6dfe4fb5de8dc62433558ddbe33f8228", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 6967, "upload_time": "2019-09-27T15:38:22", "url": "https://files.pythonhosted.org/packages/eb/f4/76017d575115f982529521d23506695ba1a16bf1abad2a00acbcdc0edc9c/janus-logging-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "54e98406a96612c9368c6ce0ef8da839", "sha256": "17534c1466affe86fe90944fd908a65950c97a4f18ab323f746f9c659b7bd648" }, "downloads": -1, "filename": "janus_logging-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "54e98406a96612c9368c6ce0ef8da839", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 6702, "upload_time": "2019-10-01T21:23:34", "url": "https://files.pythonhosted.org/packages/66/f3/5e7c19f22e2896fbbc9b76be82493800427d68b5ca83636ea100d4ab2888/janus_logging-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bcb45360b46e0af4f3cdb880c1ca9af1", "sha256": "3baa322b9f73898d8375220f15dd95a77cfd07a403921ea632f944ff0611a071" }, "downloads": -1, "filename": "janus-logging-1.1.1.tar.gz", "has_sig": false, "md5_digest": "bcb45360b46e0af4f3cdb880c1ca9af1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 7009, "upload_time": "2019-10-01T21:23:36", "url": "https://files.pythonhosted.org/packages/1d/27/620ab0726a27fd5d329f48e8121917fda9b890c5ed120fc72fd94d22352b/janus-logging-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "58c964536da1d563314c59f6929570db", "sha256": "56a39fff74e8b1d667716457150da6b7fc266c16692fe8d1685f8d57e9e211cb" }, "downloads": -1, "filename": "janus_logging-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "58c964536da1d563314c59f6929570db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 7563, "upload_time": "2019-10-04T14:39:01", "url": "https://files.pythonhosted.org/packages/af/47/b446c49c6c09355afd26a67b6ffacd6bc5f4f4ab692d03e9c7c9d8a7270c/janus_logging-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8180310b920f46788724f2c7b3bca0d8", "sha256": "54a0f275b96117f4db2fa9f3c15793fc38005bb4eae210d32b2e52d9af98a9b7" }, "downloads": -1, "filename": "janus-logging-1.2.0.tar.gz", "has_sig": false, "md5_digest": "8180310b920f46788724f2c7b3bca0d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 8731, "upload_time": "2019-10-04T14:39:03", "url": "https://files.pythonhosted.org/packages/c3/a9/73d78b70fd378cb6f7068b905d6ffa383c02775fed0228d5cc234acd0ee9/janus-logging-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "58c964536da1d563314c59f6929570db", "sha256": "56a39fff74e8b1d667716457150da6b7fc266c16692fe8d1685f8d57e9e211cb" }, "downloads": -1, "filename": "janus_logging-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "58c964536da1d563314c59f6929570db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 7563, "upload_time": "2019-10-04T14:39:01", "url": "https://files.pythonhosted.org/packages/af/47/b446c49c6c09355afd26a67b6ffacd6bc5f4f4ab692d03e9c7c9d8a7270c/janus_logging-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8180310b920f46788724f2c7b3bca0d8", "sha256": "54a0f275b96117f4db2fa9f3c15793fc38005bb4eae210d32b2e52d9af98a9b7" }, "downloads": -1, "filename": "janus-logging-1.2.0.tar.gz", "has_sig": false, "md5_digest": "8180310b920f46788724f2c7b3bca0d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 8731, "upload_time": "2019-10-04T14:39:03", "url": "https://files.pythonhosted.org/packages/c3/a9/73d78b70fd378cb6f7068b905d6ffa383c02775fed0228d5cc234acd0ee9/janus-logging-1.2.0.tar.gz" } ] }