# SPDX-License-Identifier: MIT OR Apache-2.0# This file is dual licensed under the terms of the Apache License, Version# 2.0, and the MIT License. See the LICENSE file in the root of this# repository for complete details."""Generic bound logger that can wrap anything."""from__future__importannotationsfromfunctoolsimportpartialfromtypingimportAnyfromstructlog._baseimportBoundLoggerBase
[docs]classBoundLogger(BoundLoggerBase):""" A generic BoundLogger that can wrap anything. Every unknown method will be passed to the wrapped *logger*. If that's too much magic for you, try `structlog.stdlib.BoundLogger` or `structlog.twisted.BoundLogger` which also take advantage of knowing the wrapped class which generally results in better performance. Not intended to be instantiated by yourself. See :func:`~structlog.wrap_logger` and :func:`~structlog.get_logger`. """def__getattr__(self,method_name:str)->Any:""" If not done so yet, wrap the desired logger method & cache the result. """ifmethod_name=="__deepcopy__":returnNonewrapped=partial(self._proxy_to_logger,method_name)setattr(self,method_name,wrapped)returnwrappeddef__getstate__(self)->dict[str,Any]:""" Our __getattr__ magic makes this necessary. """returnself.__dict__def__setstate__(self,state:dict[str,Any])->None:""" Our __getattr__ magic makes this necessary. """fork,vinstate.items():setattr(self,k,v)