在我的Python服务中,我使用的是内部构建的日志(log)记录库,它与Python的日志(log)记录模块不兼容.在使用这个库时,我想将其他信息添加到日志(log)中,如lineno和uncName.我一直在使用inspect
图书馆来获取以下信息:
frame = inspect.currentframe().f_back
frame_info = inspect.getframeinfo(frame)
frame_info.lineno
然而,根据Python inspect.stack is slow中的讨论,这些使用inspect
库的方法有些昂贵,因为它们访问文件系统.因此,我们注意到服务的性能下降(尽管没有我们之前使用inspect.stack()[0]
时那么糟糕).
我注意到Python的原生日志(log)模块能够有效地获取funcName和lineno方法.它们通过LogRecord属性https://python.readthedocs.io/en/latest/library/logging.html#logrecord-attributes公开.
我的问题是,Python的日志(log)记录模块如何工作来高效地收集这些信息?我试图挖掘它的源代码,但很难找到合适的位置.