在我的代码中,我从客户端获取一个日志记录器,然后执行一些操作并将分析结果记录到日志记录器中。
我想添加自己的前缀到日志记录器中,但是我不想创建自己的格式化程序,只想将我的前缀添加到现有的格式化程序中。
此外,我想在我的代码完成后删除我的前缀。
根据文档,我只能找到创建新格式化程序而不能修改现有格式化程序的方法。是否有方法可以实现这一点?
logging.Formatter
对象。但是,在运行时查看对象时,存在 _fmt
方法可获取现有格式,并且似乎调整它会起作用。我在 2.7 中尝试过,它可以工作。以下是示例。import logging
logger = logging.getLogger('something')
myFormatter = logging.Formatter('%(asctime)s - %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(myFormatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info("log statement here")
#Tweak the formatter
myFormatter._fmt = "My PREFIX -- " + myFormatter._fmt
logger.info("another log statement here")
输出:
2015-03-11 12:51:36,605 - log statement here
My PREFIX -- 2015-03-11 12:51:36,605 - another log statement here
使用 logging.LoggerAdapter
可以实现此功能。
import logging
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
return f"[my prefix] {msg}", kwargs
logger = CustomAdapter(logging.getLogger(__name__))
您可以通过'basicConfig'设置格式,Python文档中有提到:https://docs.python.org/2/howto/logging-cookbook.html#context-info
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s User: %(user)-8s %(message)s')
logger = CustomAdapter(logging.getLogger(__name__), {})
。 - northtree