#![warn(missing_docs)]
extern crate crossbeam;
extern crate serde;
extern crate serde_json;
extern crate isatty;
extern crate ansi_term;
extern crate rustc_serialize as serialize;
extern crate chrono;
use std::sync::{Arc};
use crossbeam::sync::ArcCell;
use std::fmt;
use std::io::Write as IoWrite;
use std::fmt::Write as FmtWrite;
pub mod drain;
use drain::*;
pub mod logger;
pub mod ser;
pub mod format;
pub use logger::Logger;
include!("_level.rs");
type DrainRef = Arc<ArcCell<Box<Drain>>>;
pub type OwnedKeyValue = (&'static str, Arc<ser::SyncSerialize>);
pub type BorrowedKeyValue<'a> = (&'static str, &'a ser::Serialize);
#[macro_export]
macro_rules! log(
($logger:ident, $lvl:expr, $msg:expr) => {
$logger.log($lvl, $msg, &[])
};
($logger:ident, $lvl:expr, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($lvl, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! critical(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Critical, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Critical, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! error(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Error, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Error, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! warn(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Warning, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Warning, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! info(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Info, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Info, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! debug(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Debug, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Debug, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! trace(
($logger:ident, $msg:expr) => {
$logger.log($crate::Level::Trace, $msg, &[])
};
($logger:ident, $msg : expr, $($k:expr => $v:expr),*) => {
$logger.log($crate::Level::Trace, $msg, &[$(($k, &$v)),*])
};
);
#[macro_export]
macro_rules! root_logger(
() => {
$crate::Logger::new_root(vec!())
};
($($k:expr => $v:expr),*) => {
$crate::Logger::new_root(vec!($(($k, std::sync::Arc::new(Box::new($v)))),*))
};
);
#[macro_export]
macro_rules! child_logger(
($parent:expr) => {
$parent.new(vec!())
};
($parent:expr, $($k:expr => $v:expr),*) => {
$parent.new(vec!($(($k, std::sync::Arc::new(Box::new($v)))),*))
};
);