拦截并记录所有 Django SQL 查询
问题:
记录 Django 应用执行的所有 SQL 查询对于调试、性能分析和安全监控非常有价值。如何才能实现这一点,包括 Django 管理界面生成的每个 SQL 语句?
解决方案:
要记录所有 SQL 查询,请使用以下指令增强 settings.py 中的 LOGGING 配置:
<code>LOGGING = { 'version': 1, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', } }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', } }, 'loggers': { 'django.db.backends': { 'level': 'DEBUG', 'handlers': ['console'], } } }</code>
说明:
此配置添加了一个名为“console”的新处理程序,该处理程序将日志消息打印到控制台,但仅在启用 DEBUG 模式时才打印。 “django.db.backends”记录器配置为将所有 SQL 查询以 DEBUG 级别记录到此处理程序。
用法:
要将所有 SQL 查询写入文件而不是控制台,请修改“handlers”部分如下:
<code>'handlers': { 'file': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.FileHandler', 'filename': '/path/to/all-sql.log', } }</code>
这会将所有调试日志(包括 SQL 查询)重定向到指定的文件。
以上是如何记录所有 Django SQL 查询(包括管理查询)以进行调试和监控?的详细内容。更多信息请关注PHP中文网其他相关文章!