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.
我正在使用 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.