Python
Support Level: Supported
pyrollbar is a Python SDK for reporting exceptions, errors, and log messages to Rollbar.
Quick start
Install using pip:
pip install rollbar
import rollbar
# access_token, environment, code_version
rollbar.init('POST_SERVER_ITEM_ACCESS_TOKEN', 'production', code_version='COMMIT_SHA')
try:
main_app_loop()
except IOError:
rollbar.report_message('Got an IOError in the main loop', 'warning')
except:
# catch-all
rollbar.report_exc_info()
# equivalent to rollbar.report_exc_info(sys.exc_info())
Configuration
· Django
· Celery
· Pyramid
· Flask
· Bottle
· Twisted
· FastAPI
Other
For generic Python or a non-Django/non-Pyramid framework just initialize the Rollbar library with your access token and environment.
rollbar.init('POST_SERVER_ITEM_ACCESS_TOKEN',
environment='production',
code_version='COMMIT_SHA',
**other_config_params)
Other options can be passed as keyword arguments. See the reference below for all options.
Command-line usage
pyrollbar comes with a command-line tool that can be used with other UNIX utilities to create an ad-hoc monitoring solution.
e.g. Report all 5xx haproxy requests as warning
tail -f /var/log/haproxy.log | awk '{print $11,$0}' | grep '^5' | awk '{$1="";print "warning",$0}' | rollbar -t POST_SERVER_ITEM_ACCESS_TOKEN -e production -v
e.g. Test an access token
rollbar -t POST_SERVER_ITEM_ACCESS_TOKEN -e test debug testing access token
Reference
$ rollbar --help
Usage: rollbar [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-t ACCESS_TOKEN, --access_token=ACCESS_TOKEN
You project's access token from rollbar.com.
-e ENVIRONMENT, --environment=ENVIRONMENT
The environment to report errors and messages to.
-u ENDPOINT_URL, --url=ENDPOINT_URL
The Rollbar API endpoint url to send data to.
-m HANDLER, --handler=HANDLER
The method in which to report errors.
-v, --verbose Print verbose output.
Usage
The Django, Pyramid, Flask, and Bottle integrations will automatically report uncaught exceptions to Rollbar.
Exceptions
To report a caught exception to Rollbar, use rollbar.report_exc_info()
:
try:
do_something()
except:
rollbar.report_exc_info(sys.exc_info())
# or if you have a webob-like request object, pass that as well:
# rollbar.report_exc_info(sys.exc_info(), request)
Logging
You can also send any other log messages you want, using rollbar.report_message()
:
try:
do_something()
except IOError:
rollbar.report_message('Got an IOError while trying to do_something()', 'warning')
# report_message() also accepts a request object:
#rollbar.report_message('message here', 'warning', request)
Ignoring items
To ignore an item and not send to Rollbar, add a payload handler. The payload handler will be called for each payload, and your custom logic can be applied to determine whether to send or ignore. To send, return the payload object. To ignore, return False.
Note: Payload handlers must be added after Rollbar.init()
, as init()
will reset the list of handlers.
Example:
import rollbar
rollbar.init(ACCESS_TOKEN, 'production')
def ignore_handler(payload, **kw): # kw is currently unused
if payload['data']['environment'] == 'test':
return False
else:
return payload
rollbar.events.add_payload_handler(ignore_handler)
Transforming the payload
To add, remove or modify data in the payload before sending, add a payload handler. The payload handler will be called for each payload, and any part of the payload can be modified before returning. Any changes to the payload must comply with the Rollbar API schema, or the payload will be rejected at the API.
Note: Payload handlers must be added after Rollbar.init()
, as init()
will reset the list of handlers.
Example:
import rollbar
rollbar.init(ACCESS_TOKEN, 'production')
def payload_handler(payload, **kw): # kw is currently unused
payload['data']['foo'] = 'bar' # Add new key/value to the payload
return payload
rollbar.events.add_payload_handler(payload_handler)
The pyrollbar SDK supplies a UUID during the occurrence creation process in report_message()
and report_exc_info()
method calls of the __init__.py
file. This UUID can be used to track customer issues, correlate exceptions to automated test sessions, and more.
UUIDs
To learn more about the UUID feature and its usage, visit this guide.
Examples
Here's a full example, integrating into a simple Gevent app.
"""
Sample Gevent application with Rollbar integration.
"""
import sys
import logging
from gevent.pywsgi import WSGIServer
import rollbar
import webob
# configure logging so that rollbar's log messages will appear
logging.basicConfig()
def application(environ, start_response):
request = webob.Request(environ)
status = '200 OK'
headers = [('Content-Type', 'text/html')]
start_response(status, headers)
yield '<p>Hello world</p>'
# extra fields we'd like to send along to rollbar (optional)
extra_data = {'datacenter': 'us1', 'app' : {'version': '1.1'}}
try:
# will raise a NameError about 'bar' not being defined
foo = bar
except:
# report full exception info
rollbar.report_exc_info(sys.exc_info(), request, extra_data=extra_data)
# and/or, just send a string message with a level
rollbar.report_message("Here's a message", 'info', request, extra_data=extra_data)
yield '<p>Caught an exception</p>'
# initialize rollbar with an access token and environment name
rollbar.init('POST_SERVER_ITEM_ACCESS_TOKEN', 'development')
# now start the wsgi server
WSGIServer(('', 8000), application).serve_forever()
Help / Support
If you run into any issues, please email us at [email protected]
For bug reports, please open an issue on GitHub.
Updated 9 months ago