asyncloggerlog

Rust

Asyncronous logger implementation of log facade. The implementation is based on async_logger crate, and allows non-blocking writes of log records in memory buffer, which in turn then processed in separate thread by writer (see more details in async_logger documentation).

Default log record format includes date, time, timezone, log level, target, and log message itself. Log record example:

[2020-03-15 11:47:32.339865887+0100 WARN thread]: log message.

The log record format, and other parameters are customizable with LoggerBuilder.

Examples

``` rust use asyncloggerlog::Logger; use log::{info, warn};

let logger = Logger::new("/tmp", 65536).expect("Failed to create Logger instance");

log::setboxedlogger(Box::new(logger)).expect("Failed to set logger"); log::setmaxlevel(log::LevelFilter::Info);

info!("{}", "test msg"); warn!("{}", "warning msg");

log::logger().flush(); ```

Custom writer and formatter:

``` rust use asyncloggerlog::Logger; use async_logger::Writer; use log::{debug, Record};

// Custom formatting of log::Record fn custom_formatter(record: &Record) -> String { format!("log record: {}\n", record.args()) }

struct WriterTest {}

// Writer simply prints log messages to stdout impl Writer for WriterTest {

fn process_slice(&mut self, slice: &[u8]) {
    println!("Got log message: {}", String::from_utf8_lossy(slice));
}

fn flush(&mut self) { }

}

let logger = Logger::builder() .bufsize(100) .formatter(customformatter) .writer(Box::new(WriterTest {})) .build() .unwrap();

log::setboxedlogger(Box::new(logger)).expect("Failed to set logger"); log::setmaxlevel(log::LevelFilter::Trace);

debug!("{}", "Hello, Wrold!");

log::logger().flush(); ```

Notes

  1. Dependency on time crate is optional and can be excluded by adding in Cargo.toml:

[dependencies.async_logger_log] default-features = false

  1. This crate was tested on Linux x86_64. Rust version 1.42.