如何在终端中显示Django自定义中间件的日志输出
问题解决步骤
- 首先检查Django日志级别配置
默认Django的日志配置仅输出WARNING及以上级别的日志,你代码中用的是LOG.info属于INFO级别,默认不会输出到终端。需要在settings.py中添加如下日志配置:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'INFO', }, # 也可以单独配置你中间件所在模块的日志级别,假设你的中间件放在myapp/middleware.py下 'loggers': { 'myapp.middleware': { 'handlers': ['console'], 'level': 'INFO', 'propagate': False, }, }, }
- 验证中间件是否被正常加载执行
可以先在中间件的__init__方法中添加一行LOG.warning("中间件加载成功"),重启Django服务器,如果终端能看到这条日志,说明中间件加载正常,否则检查MIDDLEWARE列表中填写的中间件路径是否完全正确。 - 检查请求是否符合中间件执行逻辑
你测试用的admin后台请求默认不会携带X-Token请求头,会走到else分支,先确认else分支的代码没有提前崩溃:你当前代码中requests.HTTPError()仅实例化了异常对象,没有添加raise关键字抛出异常,代码会继续向下执行,不会中断。可以先将测试请求手动加上X-Token头,或者把日志临时改成LOG.warning级别,排除级别过滤的影响。 - 检查前置中间件是否提前拦截请求
Django的中间件是按MIDDLEWARE列表从上到下的顺序执行的,如果你的自定义中间件位置太靠后,前面的中间件(比如AuthenticationMiddleware、CsrfViewMiddleware等)提前返回了响应或者抛出了异常,就会导致你的中间件逻辑没有被执行。建议把验证类中间件放在MIDDLEWARE列表的靠前位置。
内容的提问来源于stack exchange,提问作者ku11
相关产品推荐
相关产品推荐

