出于某种原因,在我试图修改的Python应用程序中,记录器没有记录任何内容.我跟踪错误logging/__init__.py
def handle(self, record):
"""
Call the handlers for the specified record.
This method is used for unpickled records received from a socket, as
well as those created locally. Logger-level filtering is applied.
"""
if (not self.disabled) and self.filter(record):
self.callHandlers(record)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但self.disabled就是True.在应用程序中没有任何地方设置此值,我不认为任何包正在改变它.记录器像往常一样实例化logger = logging.getLogger(__name__).当我logger.disabled = False在实际记录任何内容之前设置(在调用之前logger.info()),记录器打印预期的日志文本.但如果我不这样做,它会在handle()没有记录任何东西的情况下返回
有什么办法可以调试吗?也许可以改变Logger类,以便disabled在写入时调用某些函数...
Mar*_*ers 10
如果需要跟踪哪些代码可能设置handler.disabled为True(默认为0,默认为false),则可以将其替换为属性:
import logging
import sys
def get_disabled(self):
return self._disabled
def set_disabled(self, disabled):
frame = sys._getframe(1)
if disabled:
print('{}:{} disabled the {} logger'.format(
frame.f_code.co_filename, frame.f_lineno, self.name))
self._disabled = disabled
logging.Logger._disabled = logging.Logger.disabled
logging.Logger.disabled = property(get_disabled, set_disabled)
Run Code Online (Sandbox Code Playgroud)
交互式口译员的演示:
>>> import logging
>>> logging.getLogger('foo.bar').disabled = True
<stdin>:1 disabled the foo.bar logger
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2264 次 |
| 最近记录: |