feat: InterceptHandler with no depth on no backtrace

This commit is contained in:
张泊明518370910136 2024-10-02 22:47:47 -04:00
parent 04995f1934
commit fdfebc87d8
GPG Key ID: CA088E6D9284F870

View File

@ -11,9 +11,8 @@ from joint_teapot.config import settings
# recipe from https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging # recipe from https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
class InterceptHandler(logging.Handler): class InterceptHandler(logging.Handler):
def __init__(self, diagnose: bool = True, backtrace: bool = True): def __init__(self, backtrace: bool = True):
super().__init__() super().__init__()
self.diagnose = diagnose
self.backtrace = backtrace self.backtrace = backtrace
def emit(self, record: logging.LogRecord) -> None: def emit(self, record: logging.LogRecord) -> None:
@ -22,16 +21,16 @@ class InterceptHandler(logging.Handler):
except ValueError: except ValueError:
level = record.levelno level = record.levelno
# Find caller from where originated the logged message logger_opt = logger.opt(depth=0)
frame: Optional[FrameType] = sys._getframe(6) if self.backtrace:
depth = 6 # Find caller from where originated the logged message
while frame and frame.f_code.co_filename == logging.__file__: frame: Optional[FrameType] = sys._getframe(6)
frame = frame.f_back depth = 6
depth += 1 while frame and frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
logger.opt(depth=depth, exception=record.exc_info).log( depth += 1
level, record.getMessage(), diagnose=self.diagnose, backtrace=self.backtrace logger_opt = logger.opt(depth=depth, exception=record.exc_info)
) logger_opt.log(level, record.getMessage())
def set_logger( def set_logger(
@ -40,9 +39,7 @@ def set_logger(
diagnose: bool = True, diagnose: bool = True,
backtrace: bool = True, backtrace: bool = True,
) -> None: ) -> None:
logging.basicConfig( logging.basicConfig(handlers=[InterceptHandler(backtrace)], level=0, force=True)
handlers=[InterceptHandler(diagnose, backtrace)], level=0, force=True
)
logger.remove() logger.remove()
logger.add( logger.add(
stderr, stderr,