#[derive(Clone)]
pub struct Logger {
drain: Arc<Drain<Error=Never>>,
values: OwnedKeyValueList,
}
impl Logger {
pub fn root<D: 'static + Drain<Error=Never> + Sized>(d: D, values: Option<Box<ser::SyncMultiSerialize>>) -> Logger {
Logger {
drain: Arc::new(d),
values: OwnedKeyValueList::root(values),
}
}
pub fn new(&self, values: Option<Box<ser::SyncMultiSerialize>>) -> Logger {
Logger {
drain: self.drain.clone(),
values: if let Some(v) = values {
OwnedKeyValueList::new(v, self.values.clone())
} else {
self.values.clone()
},
}
}
#[inline]
pub fn log(&self, record: &Record) {
let _ = self.drain.log(&record, &self.values);
}
}
impl fmt::Debug for Logger {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
try!(write!(f, "Logger("));
for (i, (key, _)) in self.values.iter().enumerate() {
if i != 0 {
try!(write!(f, ", "));
}
try!(write!(f, "{}", key));
}
try!(write!(f, ")"));
Ok(())
}
}
#[doc(hidden)]
pub struct RecordStatic<'a> {
pub level: Level,
pub file: &'static str,
pub line: u32,
pub column: u32,
pub function: &'static str,
pub module: &'static str,
pub target: &'a str,
}
pub struct Record<'a> {
meta: &'a RecordStatic<'a>,
msg: fmt::Arguments<'a>,
values: &'a [BorrowedKeyValue<'a>],
}
impl<'a> Record<'a> {
#[inline]
#[doc(hidden)]
pub fn new(
s : &'a RecordStatic<'a>,
msg: fmt::Arguments<'a>,
values: &'a [BorrowedKeyValue<'a>],
) -> Self {
Record {
meta: s,
msg: msg,
values: values,
}
}
pub fn msg(&self) -> fmt::Arguments {
self.msg
}
pub fn level(&self) -> Level {
self.meta.level
}
pub fn line(&self) -> u32 {
self.meta.line
}
pub fn column(&self) -> u32 {
self.meta.column
}
pub fn file(&self) -> &'static str {
self.meta.file
}
pub fn target(&self) -> &str {
self.meta.target
}
pub fn module(&self) -> &'static str {
self.meta.module
}
pub fn function(&self) -> &'static str {
self.meta.function
}
pub fn values(&self) -> &'a [BorrowedKeyValue<'a>] {
self.values
}
}