Airbrake Rust ============= [![Build Status](https://travis-ci.org/kyrylo/airbrake-rust.svg?branch=master)](https://travis-ci.org/kyrylo/airbrake-rust) **/!\ The project is in the alpha stage /!\** * [Airbrake Rust README](https://github.com/kyrylo/airbrake-rust) Introduction ------------ _Airbrake Rust_ is an [Airbrake][airbrake.io] notifier library for the Rust Programming language. The library provides minimalist API that enables the ability to send Rust errors to the Airbrake dashboard. Key features ------------ * Uses the new Airbrake JSON API (v3)[[link][notice-v3]] * Simple, consistent and easy-to-use library API[[link](#api)] * Awesome performance (check out our benchmarks)[[link](#running-benchmarks) * Asynchronous error reporting[[link](#asynchronous-airbrake-options)] * Logging support via env_logger[[link][env_logger]] * Support for proxying[[link](#proxy)] * Support for environments[[link](#environment)] * Filters support (filter out sensitive or unwanted data that shouldn't be sent)[[link](#airbrakeadd_filter)] * Ability to ignore errors based on any condition[[link](#airbrakeadd_filter)] * SSL support (all communication with Airbrake is encrypted by default) Installation ------------ ### Cargo Add the crate to your Cargo.toml: ```toml [dependencies] airbrake = "0.2" ``` Examples -------- ### Basic example This is the minimal example that you can use to test Airbrake Rust with your project: ```rust extern crate airbrake; use std::num::ParseIntError; fn double_number(number_str: &str) -> Result { number_str.parse::().map(|n| 2 * n) } fn main() { let mut airbrake = airbrake::configure(|config| { config.project_id = "113743".to_owned(); config.project_key = "81bbff95d52f8856c770bb39e827f3f6".to_owned(); }); match double_number("NOT A NUMBER") { Ok(n) => assert_eq!(n, 20), // Asynchronously sends the error to the dashboard. Err(err) => airbrake.notify(err), } // Joins worker threads. airbrake.close(); } ``` Configuration ------------- ### project_key & project_id You **must** set both `project_id` & `project_key`. To find your `project_id` and `project_key` navigate to your project's _General Settings_ and copy the values from the right sidebar. ![][project-idkey] ```rust let mut airbrake = airbrake::configure(|config| { config.project_id = "113743".to_owned(); config.project_key = "81bbff95d52f8856c770bb39e827f3f6".to_owned(); }); ``` ### host By default, it is set to `https://airbrake.io`. A `host` is a web address containing a scheme ("http" or "https"), a host and a port. You can omit the port (80 will be assumed). ```rust let mut airbrake = airbrake::configure(|config| { config.host = "http://localhost:8080".to_owned(); }); ``` ### workers The number of threads that handle notice sending. The default value is 1. ```rust let mut airbrake = airbrake::configure(|config| { config.workers = 5; }); ``` ### proxy If your server is not able to directly reach Airbrake, you can use proxy support. By default, Airbrake Rust uses direct connection. Note: proxy authentication is not supported yet. ```rust let mut airbrake = airbrake::configure(|config| { config.proxy = "127.0.0.1:8080".to_owned(); }); ``` ### app_version The version of your application that you can pass to differentiate errors between multiple versions. It's not set by default. ```rust let mut airbrake = airbrake::configure(|config| { config.app_version = "1.0.0".to_owned(); }); ``` API --- ### airbrake #### airbrake.notify Sends an error to Airbrake *asynchronously*. `error` must implement the [`std::error::Error`][stderror] trait. Returns `()`. ```rust let mut airbrake = airbrake::configure(|config| { config.project_id = "123".to_owned(); config.project_key = "321".to_owned(); }); airbrake.notify(std::io::Error::last_os_error()); ``` #### airbrake.notify_sync Sends an error to Airbrake *synchronously*. `error` must implement the [`std::error::Error`][stderror] trait. Returns [`rustc_serialize::json::Json`][json-object]. Accepts the same parameters as [`Airbrake.notify`](#airbrakenotify). ```rust let mut airbrake = airbrake::configure(|config| { config.project_id = "123".to_owned(); config.project_key = "321".to_owned(); }); airbrake.notify_sync(std::io::Error::last_os_error()); ``` [airbrake.io]: https://airbrake.io [notice-v3]: https://airbrake.io/docs/#create-notice-v3 [env_logger]: https://crates.io/crates/env_logger [project-idkey]: https://s3.amazonaws.com/airbrake-github-assets/airbrake-ruby/project-id-key.png [stderror]: https://doc.rust-lang.org/std/error [json-object]: https://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/enum.Json.html