{"id":19399173,"url":"https://github.com/jktujg/logging-extension","last_synced_at":"2026-01-05T00:10:59.172Z","repository":{"id":239340853,"uuid":"798693278","full_name":"jktujg/logging-extension","owner":"jktujg","description":"Python logging module extension","archived":false,"fork":false,"pushed_at":"2024-07-30T07:01:49.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T06:08:00.758Z","etag":null,"topics":["extension","filter","handler","json","jsonformatter","logging","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/logging-extension/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jktujg.png","metadata":{"files":{"readme":"README.ipynb","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-10T09:42:26.000Z","updated_at":"2024-07-29T12:57:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"4da2f8c7-d4ac-4fbd-a1ff-f2ad9e199afa","html_url":"https://github.com/jktujg/logging-extension","commit_stats":null,"previous_names":["jktujg/logging-extension"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jktujg%2Flogging-extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jktujg%2Flogging-extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jktujg%2Flogging-extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jktujg%2Flogging-extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jktujg","download_url":"https://codeload.github.com/jktujg/logging-extension/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244918354,"owners_count":20531681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extension","filter","handler","json","jsonformatter","logging","python"],"created_at":"2024-11-10T11:08:22.206Z","updated_at":"2026-01-05T00:10:59.143Z","avatar_url":"https://github.com/jktujg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"{\n \"cells\": [\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\\n\",\n    \"# logging-extenson\\n\",\n    \"Extension of built-in python module `logging`\\n\"\n   ],\n   \"id\": \"31b6396577c25058\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"## Instalation\\n\",\n    \"```\\n\",\n    \"pip install logging-extension\\n\",\n    \"```\\n\"\n   ],\n   \"id\": \"57d89f2c9ba61abf\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"## Extensions\\n\",\n    \"### JSONFormatter\\n\",\n    \"Formats logs in JSON format\\n\",\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Configuration example\\n\",\n    \"\u003c/summary\u003e\\n\"\n   ],\n   \"id\": \"976733534a5b3e66\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T11:12:54.442388Z\",\n     \"start_time\": \"2024-07-29T11:12:54.438684Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging\\n\",\n    \"from logging_extension import JSONFormatter\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"json_formatter = JSONFormatter(fmt_keys=dict(\\n\",\n    \"    logger='name',\\n\",\n    \"    level='levelno',\\n\",\n    \"))\\n\",\n    \"\\n\",\n    \"logging.basicConfig(level='DEBUG', force=True)\\n\",\n    \"logging.getLogger().handlers[0].setFormatter(json_formatter)\\n\",\n    \"\\n\",\n    \"logging.getLogger().info('info_message', extra={'extra': ['value']})\"\n   ],\n   \"id\": \"bfd32aff2d6afc51\",\n   \"outputs\": [],\n   \"execution_count\": 9\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\\n\",\n    \"\u003c/details\u003e\"\n   ],\n   \"id\": \"24c8fb8a13923356\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Dictionary-based configuration example\\n\",\n    \"\u003c/summary\u003e\\n\"\n   ],\n   \"id\": \"8b065fb9a97377ad\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T11:13:13.107038Z\",\n     \"start_time\": \"2024-07-29T11:13:13.098922Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging.config\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"config = {\\n\",\n    \"    \\\"version\\\": 1,\\n\",\n    \"    \\\"disable_existing_handlers\\\": False,\\n\",\n    \"    \\\"formatters\\\": {\\n\",\n    \"        \\\"json_formatter\\\": {\\n\",\n    \"            \\\"()\\\": \\\"logging_extension.JSONFormatter\\\",\\n\",\n    \"            \\\"fmt_keys\\\": {\\n\",\n    \"                \\\"name\\\": \\\"name\\\",\\n\",\n    \"                \\\"level\\\": \\\"levelno\\\",\\n\",\n    \"            }\\n\",\n    \"        }\\n\",\n    \"    },\\n\",\n    \"    \\\"handlers\\\": {\\n\",\n    \"        \\\"stream_handler\\\": {\\n\",\n    \"            \\\"class\\\": \\\"logging.StreamHandler\\\",\\n\",\n    \"            \\\"stream\\\": \\\"ext://sys.stderr\\\",\\n\",\n    \"            \\\"formatter\\\": \\\"json_formatter\\\"\\n\",\n    \"        },\\n\",\n    \"    },\\n\",\n    \"    \\\"root\\\": {\\n\",\n    \"        \\\"level\\\": \\\"DEBUG\\\",\\n\",\n    \"        \\\"handlers\\\": [\\n\",\n    \"            \\\"stream_handler\\\"\\n\",\n    \"        ]\\n\",\n    \"    }\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"logging.config.dictConfig(config)\\n\",\n    \"logging.debug('debug_msg', extra={'extra': ['value']})\"\n   ],\n   \"id\": \"ad9591d0d2c9655c\",\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{\\\"name\\\": \\\"root\\\", \\\"level\\\": 10, \\\"created\\\": \\\"2024-07-29T11:13:13.105325+00:00\\\", \\\"message\\\": \\\"debug_msg\\\", \\\"extra\\\": [\\\"value\\\"]}\\n\"\n     ]\n    }\n   ],\n   \"execution_count\": 1\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": \"\u003c/details\u003e\",\n   \"id\": \"1914d83659263b94\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"### LevelFilter\\n\",\n    \"Logging level filter. Allows specifying a comparison function from the built-in `operator` module or providing your own.\\n\",\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Configuration example\\n\",\n    \"\u003c/summary\u003e\"\n   ],\n   \"id\": \"c93f12bde3c0c23\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T11:17:33.671404Z\",\n     \"start_time\": \"2024-07-29T11:17:33.662798Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging \\n\",\n    \"from logging_extension import LevelFilter\\n\",\n    \"\\n\",\n    \"# `compare` argument also can be any function that compares levels\\n\",\n    \"# e.g. compare(record_level: int, filter_level: int) -\u003e bool: ...\\n\",\n    \"only_error_filter = LevelFilter(level='ERROR', compare='eq', name='only_error_filter')\\n\",\n    \"\\n\",\n    \"logging.basicConfig(level='DEBUG', force=True)\\n\",\n    \"logging.getLogger().addFilter(only_error_filter)\\n\",\n    \"\\n\",\n    \"logging.critical('skip critical')\\n\",\n    \"logging.error('show error')\"\n   ],\n   \"id\": \"b1aed373723b3f5b\",\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"ERROR:root:show error\\n\"\n     ]\n    }\n   ],\n   \"execution_count\": 3\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\\n\",\n    \"\u003c/details\u003e\\n\"\n   ],\n   \"id\": \"b32efe6ac5800082\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Dictionary-based configuration example\\n\",\n    \"\u003c/summary\u003e\"\n   ],\n   \"id\": \"5ee71e22a4126d5f\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T11:17:23.383921Z\",\n     \"start_time\": \"2024-07-29T11:17:23.379349Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging.config\\n\",\n    \"\\n\",\n    \"config = {\\n\",\n    \"    \\\"version\\\": 1,\\n\",\n    \"    \\\"disable_existing_handlers\\\": False,\\n\",\n    \"    \\\"filters\\\": {\\n\",\n    \"        \\\"only_error_filter\\\": {\\n\",\n    \"            \\\"()\\\": \\\"logging_extension.LevelFilter\\\",\\n\",\n    \"            \\\"level\\\": \\\"ERROR\\\",\\n\",\n    \"            \\\"compare\\\": \\\"eq\\\",\\n\",\n    \"        }\\n\",\n    \"        \\n\",\n    \"    },\\n\",\n    \"    \\\"loggers\\\": {\\n\",\n    \"        \\\"root\\\": {\\n\",\n    \"            \\\"level\\\": \\\"DEBUG\\\",\\n\",\n    \"            \\\"filters\\\": [\\n\",\n    \"                \\\"only_error_filter\\\",\\n\",\n    \"            ]\\n\",\n    \"        }\\n\",\n    \"    }\\n\",\n    \"}\\n\",\n    \"logging.config.dictConfig(config)\\n\",\n    \"\\n\",\n    \"logging.critical('skip critical', extra={'extra': 'value'})\\n\",\n    \"logging.error('show error', extra={'extra': 'value'})\\n\",\n    \"\\n\",\n    \"logging.getLogger().filters.clear()\"\n   ],\n   \"id\": \"4e58cb1a4ed9c69e\",\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"ERROR:root:show error\\n\"\n     ]\n    }\n   ],\n   \"execution_count\": 2\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": \"\",\n   \"id\": \"57e5da7d6b30cbf\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": \"\u003c/details\u003e\",\n   \"id\": \"a3654a4cc2a1b49a\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"### ThreadedHandler\\n\",\n    \"Container for handlers that perform non-blocking logging in a separate thread.\\n\",\n    \"Essentially, a wrapper around `QueueHandler` with automatic start of `QueueListener` using the provided handlers.\\n\",\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Configuration example\\n\",\n    \"\u003c/summary\u003e\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\"\n   ],\n   \"id\": \"84fbab3d85eefcce\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T11:58:14.310015Z\",\n     \"start_time\": \"2024-07-29T11:58:14.305052Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging\\n\",\n    \"from logging_extension import ThreadedHandler\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"threaded_handler = ThreadedHandler(\\n\",\n    \"    handler_0=logging.StreamHandler(),\\n\",\n    \"    handler_2=logging.StreamHandler(),\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"logging.basicConfig(force=True, level='DEBUG')\\n\",\n    \"logging.getLogger().handlers = [threaded_handler]\\n\",\n    \"\\n\",\n    \"logging.getLogger().warning('debug msg')\\n\",\n    \"print('in main thread')\"\n   ],\n   \"id\": \"3a65e30fd259339b\",\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"in main thread\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"debug msg\\n\",\n      \"debug msg\\n\"\n     ]\n    }\n   ],\n   \"execution_count\": 48\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\\n\",\n    \"\u003c/details\u003e\\n\"\n   ],\n   \"id\": \"9712bfff73582b0c\"\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": [\n    \"\\n\",\n    \"\u003cdetails\u003e\\n\",\n    \"\u003csummary\u003e\\n\",\n    \"Dictionary-based configuration example\\n\",\n    \"\u003c/summary\u003e\\n\"\n   ],\n   \"id\": \"c0061ed258c740f6\"\n  },\n  {\n   \"metadata\": {\n    \"ExecuteTime\": {\n     \"end_time\": \"2024-07-29T12:06:58.552529Z\",\n     \"start_time\": \"2024-07-29T12:06:58.546809Z\"\n    }\n   },\n   \"cell_type\": \"code\",\n   \"source\": [\n    \"import logging.config\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"config = {\\n\",\n    \"    \\\"version\\\": 1,\\n\",\n    \"    \\\"disable_existing_handlers\\\": False,\\n\",\n    \"    \\\"handlers\\\": {\\n\",\n    \"        \\\"stream_handler_0\\\": {\\n\",\n    \"            \\\"class\\\": \\\"logging.StreamHandler\\\",\\n\",\n    \"            \\\"stream\\\": \\\"ext://sys.stderr\\\",\\n\",\n    \"        },\\n\",\n    \"        \\\"stream_handler_1\\\": {\\n\",\n    \"            \\\"class\\\": \\\"logging.StreamHandler\\\",\\n\",\n    \"            \\\"stream\\\": \\\"ext://sys.stderr\\\",\\n\",\n    \"        },\\n\",\n    \"        \\\"threaded_handler\\\": {\\n\",\n    \"            \\\"()\\\": \\\"logging_extension.ThreadedHandler\\\",\\n\",\n    \"            \\\"handler_0\\\": \\\"cfg://handlers.stream_handler_0\\\",\\n\",\n    \"            \\\"handler_1\\\": \\\"cfg://handlers.stream_handler_1\\\",\\n\",\n    \"        },\\n\",\n    \"    },\\n\",\n    \"    \\\"root\\\": {\\n\",\n    \"        \\\"level\\\": \\\"DEBUG\\\",\\n\",\n    \"        \\\"handlers\\\": [\\n\",\n    \"            \\\"threaded_handler\\\"\\n\",\n    \"        ]\\n\",\n    \"    }\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"logging.config.dictConfig(config)\\n\",\n    \"\\n\",\n    \"logging.getLogger().warning('debug msg')\\n\",\n    \"print('in main thread')\"\n   ],\n   \"id\": \"f036073f1fcc83e4\",\n   \"outputs\": [],\n   \"execution_count\": 55\n  },\n  {\n   \"metadata\": {},\n   \"cell_type\": \"markdown\",\n   \"source\": \"\u003c/details\u003e\\n\",\n   \"id\": \"e5fa7a7b5ef807d6\"\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 2\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython2\",\n   \"version\": \"2.7.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjktujg%2Flogging-extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjktujg%2Flogging-extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjktujg%2Flogging-extension/lists"}