Python日志:如何向LogRecord添加一个自定义字段,并注册一个全局回调来设置它的值

2024-10-01 15:44:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在Flask应用程序中,每当flask.session中存在user_id时,我想添加一个user_id字段,添加到生成的每个错误日志记录中。在

我想出了下面的解决方案,但它太老套了,因为它不允许格式字符串驱动user_id的格式化,而且日志API似乎提供了定制日志的方法(LoggerAdapterlogging.makeRecord,等等……),我认为必须有一种更干净的方法。在

“python方法”是什么呢?在

class CustomFormatter(Formatter):
    def format(self, record):
        from myapp.core import authenticationManager
        user_id = authenticationManager.current_user_id_if_authenticated()
        user_id = "unknown" if user_id is None else str(user_id)
        return super(F,self).format(record) + ", user_id" + user_id

Tags: 方法selfid应用程序formatflaskifsession
2条回答

^{}Github page)包执行以下操作:

使用:

import logaugment

logaugment.set(logger, user_id='custom_value')

所有带有logger的日志记录调用现在将在日志消息中使用'custom_value'的值%(user_id)s。在

您可以反复调用logaugment.set来更改值。或者,您可以指定一个callable,它将在每次进行日志记录调用时被调用。这将允许动态计算/检索用户ID(请参阅包自述文件中的示例)。在

要安装:

^{pr2}$

(免责声明:我开发了这个软件包)

您可以定义a custom filter,它为record.user_id注入一个值。通过这种方式,您可以定义一种格式,它包括%(user_id)s,就像其他(标准)记录属性一样:

format='%(asctime)-15s %(name)-5s %(levelname)-8s user_id %(user_id)-15s: %(message)s')

然后所有日志记录调用都将自动添加user_id值。在


^{pr2}$

相关问题 更多 >

    热门问题