Python 如何在Django中拦截对DB的所有读取查询?
我需要截取对DB的所有查询,并将它们写入文件日志。Python 如何在Django中拦截对DB的所有读取查询?,python,django,signals,Python,Django,Signals,我需要截取对DB的所有查询,并将它们写入文件日志。 所以,如果像DELETE、UPDATE和CREATE这样的基本操作,我可以使用signals框架进行拦截。但是阅读查询呢?如何用信号捕捉它们?我认为django已经用它的日志框架实现了这一点。如果您想专门记录数据库查询。 您可以在设置中尝试以下操作 LOGGING = { 'handlers': { 'query': { 'level': 'DEBUG', 'class':
所以,如果像DELETE、UPDATE和CREATE这样的基本操作,我可以使用signals框架进行拦截。但是阅读查询呢?如何用信号捕捉它们?我认为django已经用它的日志框架实现了这一点。如果您想专门记录数据库查询。 您可以在设置中尝试以下操作
LOGGING = {
'handlers': {
'query': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'logs/query.log',
'formatter': 'verbose'
},
},
'loggers': {
'django.db.backends': {
'handlers': ['query'],
'propagate': False,
'level': 'DEBUG',
},
}
}
另一种方法是创建自定义中间件,并在其中处理查询
class SQLLoggingMiddleware(object):
def process_request(self, request):
from django.db import connection
for query in connection.queries:
#... do something with query
由于性能原因,SQL日志记录仅在Stutux.Debug被设置为true时启用,而不管安装的日志记录级别或处理程序。“这将杀死您的服务器。我不关心,这是一项任务。如果一个公司给出这样的任务,您可能会考虑替代性的就业。这类事情几乎不应该做,如果真的做了,应该在数据库级别。在理想的世界里编辑你的问题并标记你的数据库,伙计。但我有我所拥有的。