actix-tools 0.1.0

Provide Plug&Play components for Actix and Actix-web to build modular, 12-factor compliant apps.
Documentation
use chrono::Utc;
use env_logger;
use env_logger::Formatter;
use log::Record;
use serde_json;
use std::io::{Error, Write};

#[derive(Clone, Deserialize)]
pub struct LogSettings {
    pub level:     String,
    pub backtrace: String,
}

pub fn formatter(buffer: &mut Formatter, record: &Record) -> Result<(), Error> {
    let data = json!({
        "level": record.level().to_string(),
        "message": record.args(),
        "timestamp": Utc::now(),
    });
    let payload = serde_json::to_string(&data)?;
    writeln!(buffer, "{}", payload)
}

pub fn init_logger(settings: LogSettings) {
    ::std::env::set_var("RUST_BACKTRACE", settings.backtrace);
    ::std::env::set_var("RUST_LOG", settings.level);

    env_logger::Builder::from_default_env()
        .format(formatter)
        .default_format_timestamp(false)
        .init();
}