Python日志:如何向LogRecord添加自定义字段,并注册一个全局回调来设置它';s值
在Flask应用程序中,我想在生成的每个错误日志记录中添加一个Python日志:如何向LogRecord添加自定义字段,并注册一个全局回调来设置它';s值,python,flask,Python,Flask,在Flask应用程序中,我想在生成的每个错误日志记录中添加一个user\u id字段,只要Flask.session中存在user\u id 我提出了下面的解决方案,但它很粗糙,因为它不允许格式字符串驱动用户id的格式,而且日志API似乎提供了定制日志的方法(LoggerAdapter,logging.makeRecord,等等),我认为必须有一种更干净的方法 “python方式”是什么 class CustomFormatter(Formatter): def format(self,
user\u id
字段,只要Flask.session中存在user\u id
我提出了下面的解决方案,但它很粗糙,因为它不允许格式字符串驱动用户id
的格式,而且日志API似乎提供了定制日志的方法(LoggerAdapter
,logging.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
您可以定义哪个为记录.user\u id
注入值。通过这种方式,您可以定义一种格式,该格式与其他(标准)记录属性一样,包含%(用户id)
:
format='%(asctime)-15s %(name)-5s %(levelname)-8s user_id %(user_id)-15s: %(message)s')
然后,所有日志调用将自动添加用户id
值
()包执行以下操作:
使用:
import logaugment
logaugment.set(logger, user_id='custom_value')
使用logger
的所有日志调用现在将在日志消息中为%(用户id)s
使用值'custom\u value'
您可以重复调用logaugment.set
,而无需更改值。或者,您可以指定每次进行日志记录调用时都将调用的callable。这将允许动态计算/检索用户ID(参见包自述中的示例)
要安装:
pip install logaugment
(免责声明:我开发了这个软件包)谢谢,它工作得很好,但是应该返回1而不是True,正如文档规定的那样:?任何在布尔上下文中计算为True的对象都可以,“将此记录器的筛选器应用于记录,如果要处理记录,则返回真值”。我更喜欢True
而不是1
,因为它强调我们使用的是对象的“布尔性”。太好了。在您的示例中,记录器的所有子记录器是否可以在其日志调用中使用custom_value
?
pip install logaugment