【发布时间】:2017-11-09 11:30:12
【问题描述】:
Django 如何使用日志记录来使用格式化程序中的自定义属性进行日志记录?例如,我正在考虑记录登录的用户名。
在settings.py脚本中,定义了LOGGING变量:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
},
},
'formatters' : {
'info_format' : {
'format' : '%(asctime)s %(levelname)s - %(message)s',
},
}
}
我希望使用一种格式,例如:
'format' : '%(asctime).19s %(levelname)s - %(username)s: %(message)s'
其中 username 将是当前登录的用户。也许可以在此处添加任何其他类型的会话变量。
这里的一种解决方法是在记录器方法上使用extra 参数,它接收带有键的字典作为我想在格式字符串上使用的字符串:
logger.info(message, extra={'username' : request.user.username})
另一个(丑陋的)解决方法是构建消息属性以包含不属于日志格式化程序的默认属性的内容。
message = request.user.username + " - " + message
logger.info(message)
但是,有没有办法设置具有某些属性的格式字符串并让 Django 自动将它们提供给日志记录 API?例如,如果 %(username)s,request.user.username,可能是其他任何人...
【问题讨论】:
-
请显示一些已经完成的代码。
-
@JohnPeters 你去!