在Flask应用程序中,我想添加一个user_id字段,添加到每个生成的错误日志记录中,只要user_id存在flask.session.
我想出了下面的解决方案,但它的hackish,因为它不允许格式字符串来驱动的格式user_id,而且由于记录API似乎提供了一些方法来定制日志(LoggerAdapter,logging.makeRecord,等...)我的身影必须有一个更清洁的方式.
这样做的"蟒蛇方式"是什么?
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
Run Code Online (Sandbox Code Playgroud)
您可以定义为其注入值的自定义过滤器record.user_id.通过这种方式,您可以定义一种格式,其中包括%(user_id)s其他(标准)记录属性:
format='%(asctime)-15s %(name)-5s %(levelname)-8s user_id %(user_id)-15s: %(message)s')
Run Code Online (Sandbox Code Playgroud)
然后所有日志记录调用将自动添加该user_id值.
import logging
class UserIDFilter(logging.Filter):
"""
This is a filter which injects contextual information into the log.
"""
from myapp.core import authenticationManager
def filter(self, record):
user_id = authenticationManager.current_user_id_if_authenticated()
user_id = "unknown" if user_id is None else str(user_id)
record.user_id = user_id
return True
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)-15s %(name)-5s %(levelname)-8s user_id %(user_id)-15s: %(message)s')
logger = logging.getLogger(__name__)
filt = UserIDFilter()
logger.addFilter(filt)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |