Django:在开发中禁用 RollBar

Django: Disable RollBar in Development

我正在使用 Rollbar 来跟踪我的 Django 应用程序的错误。出于某种原因,我从本地主机(开发中)收到错误消息。

Settings.py:

import rollbar
import os

THUMBNAIL_DEBUG = False
DEBUG = False
TEMPLATE_DEBUG = False

ROLLBAR = {
        'access_token': '****',
        'environment': 'development' if DEBUG else 'production',
        'root': BASE_DIR,
        'class': 'rollbar.logger.RollbarHandler'
    }

rollbar.init(**ROLLBAR)

Settings_Dev.py:

from settings import *

DEBUG = True
TEMPLATE_DEBUG = True
THUMBNAIL_DEBUG = True

我在本地开发环境中使用 settings_dev.py。

我通常创建三个设置文件。第一个是适用于开发和生产的基本设置。另外两个从基础导入所有内容并添加额外内容。

所以对于你的情况,你可以 settings_base.py:

THUMBNAIL_DEBUG = False
DEBUG = False
TEMPLATE_DEBUG = False

对于settings_production.py

from settings_production import *

ROLLBAR = {
        'access_token': '****',
        'environment': 'development' if DEBUG else 'production',
        'root': BASE_DIR,
        'class': 'rollbar.logger.RollbarHandler'
    }

rollbar.init(**ROLLBAR)

这样 Rollbar 只会在生产中启用。

现在看来您可以使用 "enabled" 设置:

ROLLBAR = {
    'access_token': '****',
    'environment': 'development' if DEBUG else 'production',
    'root': BASE_DIR,
    'class': 'rollbar.logger.RollbarHandler',
    'enabled': not DEBUG,
}

这个答案不是特定于 Django 的,但它提供了三种单独的方法来禁用 rollbar:

通过负载处理程序

添加一个 payload handler 以忽略 rollbar 的所有有效负载。

import rollbar

def _payload_handler_to_disable_rollbar(payload, **kw) -> bool:
    return False

rollbar.events.add_payload_handler(_payload_handler_to_disable_rollbar)

如果使用 pytest,请根据 this answer.

在函数 pytest_sessionstart 中的 ./confest.py 中定义上述内容
通过 monkeypatching

Monkeypatch rollbar.report_exc_info 禁用它。

import rollbar

def _disabled_rollbar_report_exc_info(*_args, **_kwargs) -> None:
    pass

rollbar.report_exc_info = _disabled_rollbar_report_exc_info

如果使用 pytest,请根据 this answer.

在函数 pytest_sessionstart 中的 ./confest.py 中定义上述内容
通过/etc/hosts

更新 /etc/hosts 以阻止 api.rollbar.com

$ sudo echo '127.0.0.1 api.rollbar.com' >> /etc/hosts
$ sudo dscacheutil -flushcache  # On Mac to flush the DNS cache.