{"library":"logfury","title":"logfury","description":"Logfury is a toolkit for Python library maintainers, offering responsible, low-boilerplate logging of method calls. It implements an 'apiver' import strategy (e.g., `from logfury.v1 import ...`) to ensure API stability, allowing users to explicitly opt into versioned APIs. The library is currently at version 1.0.1, released on October 23, 2021, with a focus on method call tracing and a mature development status.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install logfury"],"cli":null},"imports":["from logfury.v1 import DefaultTraceMeta","from logfury.v1 import limit_trace_arguments","from logfury.v1 import disable_trace"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import logging\nimport six\nfrom logfury.v1 import DefaultTraceMeta, limit_trace_arguments, disable_trace\n\nlogging.basicConfig()\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.DEBUG)\n\n@six.add_metaclass(DefaultTraceMeta)\nclass Foo:\n    def baz(self, a, b, c=None):\n        return True\n\n    def get_blah(self):\n        return 5\n\n    def _hello(self):\n        pass\n\n    @disable_trace\n    def world(self):\n        pass\n\n    def __repr__(self):\n        return '<{} object>'.format(self.__class__.__name__)\n\nclass Bar(Foo):\n    def baz(self, a, b, c=None):\n        b += 1\n        return super(Bar, self).baz(a, b, c)\n\n    @limit_trace_arguments(skip=['password'])\n    def secret(self, password, other):\n        pass\n\na = Foo()\na.baz(1, 2, 3)\na.baz(4, b=8)\na.get_blah() # Not traced by default pattern\na._hello()   # Not traced by default pattern\na.world()    # Explicitly disabled\n\nb = Bar()\nb.baz(5, 6)\nb.secret('my_secret', 'other_value')\n\n# Expected output in console for a.baz calls:\n# DEBUG:__main__:calling Foo.baz(self=<Foo object>, a=1, b=2, c=3)\n# DEBUG:__main__:calling Foo.baz(self=<Foo object>, a=4, b=8)\n","lang":"python","description":"This example demonstrates basic usage of `logfury` by applying `DefaultTraceMeta` to a class to automatically log method calls. It also shows `disable_trace` for excluding methods and `limit_trace_arguments` for sensitive parameters. Ensure basic logging is configured to see output.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.0.1","pypi_latest":"1.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.7,"avg_import_s":0.04,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.5,"disk_size":"17.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.02,"mem_mb":1.5,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.06,"mem_mb":1.8,"disk_size":"19.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.05,"mem_mb":1.8,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":1.6,"disk_size":"11.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.06,"mem_mb":1.6,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.06,"mem_mb":2.4,"disk_size":"11.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.06,"mem_mb":2.2,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1.5,"disk_size":"17.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"logfury","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.9,"import_time_s":0.02,"mem_mb":1.5,"disk_size":"18M"}]}}