我想添加MDC来记录动态更新的消息。一个特定的示例是将变量值添加到在变量更新时更新的日志消息中。我尝试使用LoggerAdapter进行此操作,但是即使我代码中的变量已更新,设置的值仍保持静态。
这是我为尝试实现此目的而构建的CustomAdapter:
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
for key in sorted(self.extra.keys()):
msg = '[{0}] {1}'.format(self.extra.get(key), msg)
return msg, kwargs
但是,如果我将变量传递给CustomAdapter以便添加到所有日志消息之前,则该变量不会动态更新。
例如,我想在所有日志消息中添加变量x的值,但是如果x发生变化,我希望在x更改后将新值自动添加到所有日志消息中。
如何在Python3中添加动态MDC来记录消息?
编辑:回答了我自己的问题。修改CustomAdapter以使用函数调用并传递一个lambda返回要更新的变量。因此适配器应为:
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
for key in sorted(self.extra.keys()):
msg = '[{0}] {1}'.format(self.extra.get(key)(), msg)
return msg, kwargs