= Integrate a slog Logger with your Rocket.rs application

http://pwoolcoc.gitlab.io/rocket-slog-fairing/rocket_slog/index.html[Documentation (master)]

This is a fairing that you can attach to your rocket.rs application to enable use of a slog `Logger` in your
handlers

== Installation (for rocket v0.3)

In your `Cargo.toml`, put the following in the `[dependencies]` section:

----
rocket-slog = "0.3"
----

For pre-2018-edition crates, put the following in your crate root:

----
extern crate rocket_slog;
----

== Installation (for rocket 0.4)

In your `Cargo.toml`, put the following in the `[dependencies]` section:

----
rocket-slog = "0.4.0-rc.2"
----

For pre-2018-edition crates, put the following in your crate root:

----
extern crate rocket_slog;
----

== Example (for rocket 0.3)

Here is an example application that uses the rocket-slog fairing. Note that you should probably disable the builtin
rocket logger unless you want the output from both logging systems.

----
#![feature(plugin)]
#![plugin(rocket_codegen)]

extern crate rocket;
extern crate rocket_slog;
#[macro_use(debug)] extern crate slog;
extern crate sloggers;

use std::error::Error;
use rocket::{Config};
use rocket_slog::{SyncLogger, SlogFairing};
use sloggers::{
    Build,
    terminal::{
        TerminalLoggerBuilder,
        Destination,
    },
    types::Severity,
};

#[get("/")]
fn index(logger: SyncLogger) -> &'static str {
    debug!(logger.get(), "THIS IS A CUSTOM MESSAGE");
    "hello, world"
}

fn main() -> Result<(), Box<Error>> {
    let mut builder = TerminalLoggerBuilder::new();
    builder.level(Severity::Debug);
    builder.destination(Destination::Stderr);
    let logger = builder.build()?;

    let fairing = SlogFairing::new(logger);

    let config = Config::development().unwrap();
    rocket::custom(config, false) // disables logging
        .attach(fairing)
        .mount("/", routes![index])
        .launch();
    Ok(())
}
----

== Example (for rocket 0.4)

----
#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;
#[macro_use(debug)] extern crate slog;
extern crate rocket_slog;
extern crate sloggers;

use std::error::Error;
use rocket::config::{Config, Environment, LoggingLevel};
use rocket_slog::{SlogFairing, SyncLogger};
use sloggers::{
    Build,
    terminal::{
        TerminalLoggerBuilder,
        Destination,
    },
    types::Severity,
};

#[get("/")]
fn index(log: SyncLogger) -> &'static str {
    debug!(log, "some log message");
    "Hello world"
}

fn main() -> Result<(), Box<Error>> {
    let mut builder = TerminalLoggerBuilder::new();
    builder.level(Severity::Debug);
    builder.destination(Destination::Stderr);
    let logger = builder.build()?;
    let fairing = SlogFairing::new(logger);
    let config = Config::build(Environment::Development)
            .log_level(LoggingLevel::Off) // disables logging
            .finalize()
            .unwrap();
    rocket::custom(config)
        .mount("/", routes![index])
        .attach(fairing)
        .launch();
    Ok(())
}
----
