我想记录用户会话。目前代码如下(省略设置格式化程序和处理程序):
logger = logging.getLogger("component")
logger.info("message", extra={"session": 123})
logger.debug("debug", extra={"session": 123})
如果要记录多条消息,每次发送此额外信息都很烦人。什么是最好/最干净/最pythonic的方式来实现这样的目标:
logger = logging.getLogger("component")
# for example:
logger.addExtra({"session": 123})
logger.info("message") # extra would be added automatically
logger.debug("debug") # extra would be added automatically
我可以考虑扩展记录器和覆盖日志记录方法。
答案 0 :(得分:3)
创建LoggerAdapter
指定为@DhruvPathak。根据{{3}}:
class logging.LoggerAdapter(logger, extra)
通过在初始化期间提供记录器实例和extra
args来实现这一点:
logger = logging.LoggerAdapter(logger, extra)
答案 1 :(得分:1)
使用函数工厂,例如
def get_logger_with_context(name, context=None):
extra = context or {}
logger = logging.getLogger(name)
def log(level, message, **kwargs):
getattr(logger, level)(message, extra=context)
return log
答案 2 :(得分:1)
这样的custom logging在python日志记录类中是可行的,使用logging.loggerAdapters来修改日志记录行为。
您可以通过简单的方式传递上下文信息以进行输出 与记录事件信息一起使用LoggerAdapter 类。这个类看起来像一个Logger,所以你可以 调用debug(),info(),warning(),error(),exception(),critical()和 登录()。这些方法与其中的对应方具有相同的签名 记录器,因此您可以互换使用这两种类型的实例。
答案 3 :(得分:0)
请参阅Python logging doc:在LogAdapter旁边,您也可以使用LogFilter。
我通常使用MDC因为影响所有记录器。不幸的是,Python日志记录没有MDC。我刚刚找到mdaniel's MDC gist。