有延迟python调试的解决方案吗?

时间:2017-10-23 19:46:15

标签: python django

我在生产中的Django服务器上有浮动错误,它不会导致异常,只会导致一些错误的行为。但我不能在我的语言环境机器上重现它;所以我需要在服务器端调试它。是否有任何工具可以记录所有变量的所有状态,然后我可以重播有问题的请求并找出行为错误的原因?

1 个答案:

答案 0 :(得分:2)

我同意Taras的建议,即Sentry是一件很棒的事情。不幸的是,如果问题没有产生异常(或INFO或WARN消息),那么它就不会自己解决问题。

我建议(如果您还没有这样做)将哨兵记录实施到您的观看次数:https://raven.readthedocs.io/en/stable/integrations/django.html

将Sentry添加到生产应用后,您可以在视图中添加以下代码:

def my_view(request):
    if some_condition:
        foo = 12
    else:
        foo = 15
    logger.info('Line 45 of the Login view', exc_info=True, extra={
        'request': request,
        'myvar': foo,  # A variable you're interested in 
    })

然后,如果您访问生产页面,它将生成一条您可以在哨兵中查看的日志消息。

旁注 一旦确定了您的特定错误,可能值得研究一下您无法在本地重现问题。这不可避免地发生在每个人身上,但最小化是件好事。这样做的一些技巧包括:

  1. 使用django-environ让您的settings.py文件看起来相似/相同
  2. 从一个生产数据库备份还原本地数据库
  3. 将在prod / dev环境中检测到并且行为不同的代码限制为settings.py文件。
  4. 使用docker保持本地/ prod实例几乎相同。