gue*_*tli 5 python django logging filtering deprecation-warning
我们正在将我们的应用程序从Django 1.6更新到1.7.
我们看到很多这样的信息:RemovedInDjango18Warning
有没有办法过滤它们?它们在导入期间被释放.
我们尝试了,warnings.filterwarnings('ignore', '...')但是在我们打电话之前警告会被发出warnings.filterwarnings().
如何过滤导入期间发生的这些警告?
要仅在运行时使其静音manage.py,请在以下后面添加以下行import sys:
# ...
import sys
if not sys.warnoptions:
sys.warnoptions += [None]
# ...
Run Code Online (Sandbox Code Playgroud)
如果您还想从WSGI服务器(即Apache)your_project/wsgi.py中将其静音,请在以下行之后更新并添加以下行import os:
# ...
import os
import sys
if not sys.warnoptions:
sys.warnoptions += [None]
# ...
Run Code Online (Sandbox Code Playgroud)
这是有效的原因是因为django.utils.log.configure_logging()处理它:
def configure_logging(logging_config, logging_settings):
if not sys.warnoptions:
# Route warnings through python logging
logging.captureWarnings(True)
# RemovedInNextVersionWarning is a subclass of DeprecationWarning which
# is hidden by default, hence we force the "default" behavior
warnings.simplefilter("default", RemovedInNextVersionWarning)
# ...
Run Code Online (Sandbox Code Playgroud)
故意在启动过程的早期调用它作为其中的一部分django.setup(),这解释了为什么在你能够在堆栈中进一步沉默之前发出错误.
添加一个新元素以sys.warnoptions强制它评估True,绕过逻辑.这是无害的,因为它仅在python启动时由warnings模块加载时使用.
RemovedInNextVersionWarning只是RemovedInDjango18WarningDjango 1.7的别名.它被设置为RemovedInDjango19Warning1.8,对于将来的版本等等 - 这段代码应该是这种类型的未来证明DeprecationWarning.
注意,sys.warnoptions通常在python启动期间根据调用python时的-W参数设置.因此,在使用开发服务器时,只需使警告静音的简单方法就是python -W123 manage.py runserver.这不需要修改文件,但在启动时会导致单个无害警告,因为123它只是一个占位符而不是有效的警告操作.
另一种方式是python -Wi::DeprecationWarning manage.py runserver,虽然这会忽略所有 DeprecationWarning的,包括可能不感兴趣的RemovedInDjango18Warning.
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |