而日志记录过滤器中的循环会破坏Django服务器

时间:2015-12-08 16:55:32

标签: python django

我想在我的Django项目中为python记录器添加一个过滤器;过滤器中有一个while循环(等待并允许用户提供响应)。但是,当我尝试实现我的过滤器时,服务器似乎立即中断并且我的视图进入无限循环(当我在终端窗口中测试过滤器时不会发生这种情况)。

我的代码我看起来像这样:

import logging, time, os

# in my Utils.py file:
def ErrorReport(msg, notify=False, warnOnly=False):
  logger.exception("ErrorReport:%s" % msg, exc_info=True)
  raise RuntimeError('Aborting execution. Terrible things might happen. Check logs for more information')

# in my views.py file:
class ErrorFilter(logging.Filter):
  def __init__(self,level):
    self.level = level
    print level

  def filter(self,record):
    if record.levelno == self.level:
        os.environ["ERROR_FLAG"] = "True"
        timeout = time.time() + 60*1 #set the timeout to 1 minute
        while True:
            print "waiting..."
            keep_going = os.environ.get("CONTINUE_FLAG")
            #wait for user to respond
            if keep_going == "False" or time.time() > timeout:
                Utils.ErrorReport("There's a problem, quiting current process.")
            if keep_going == "True":
                break

logger     = Utils.getLogger() #I format the logger in another python script called Utils
logger.addFilter(ErrorFilter(logging.ERROR)) 

def home(request):
  context_dict = {'boldmessage': "--> To view logs, please turn off any popup blockers <--",'version':"1.1.6"}
  logger.error("faking an error to test new filter")
  return render(request, 'InterfaceApp/home.html', context_dict)

我已经在终端窗口中测试了这个过滤器的更简单版本,并且没有任何问题,它陷入无限循环。当我尝试打开我的django网站的主页时,看起来它正在永远加载,当我查看开发人员窗口时,我可以看到我丢失了与服务器的连接。在我正在运行服务器的终端窗口中,我永远得到了打印语句waiting...,即使我已经在while循环上设置并测试了超时。

在django项目中运行while循环是否存在根本问题,或者我错过了什么?

0 个答案:

没有答案