Session_log crate
This crate tries to provide a easy to use logging system that can group / nest logs in a session like
manner. This is useful for systems that having multiple threads and you want to group logs by session.
Usage
For most basic usage, you just need to import everything from session_log::prelude and you're good
to go.
use session_log::prelude::*;
fn main() {
let logger = Logger::new("main");
log_info!(logger, "Hello, world!");
{
let session = logger.session();
log_info!(session, "Hello, session!");
{
let session = session.session();
log_info!(session, "Hello, nested session!");
}
log_info!(session, "Goodbye, session!");
}
}
The creation of a logger is very cheap, essentially it's just a wrapper around String as the key
to a global map of loggers.
use session_log::prelude::*;
fn main() {
let logger1 = Logger::new("main");
logger1.set_level(Level::Verbose);
let logger2 = Logger::new("main");
assert_eq!(
logger1.get_level(),
logger2.get_level());
}
Each entry point have their own logging level and output directory can be set either at initialization
or at runtime.
use session_log::{
prelude::*,
Level,
};
fn main() {
{ let logger1 = Logger::with_options("1",
Level::Verbose, "logs/1").unwrap();
assert_eq!(
Logger::with_options("1",
Level::Info, "logs/1").is_err(),
true);
assert_eq!(
Logger::with_options("1",
Level::Verbose, "logs/1").is_err(),
false);
}
{ let logger2 = Logger::try_with_options("2",
Level::Verbose, "logs/2");
let logger2 = Logger::try_with_options("2",
Level::Verbose, "logs/2");
}
{ let logger2 = Logger::new("3");
logger2.set_level(Level::Verbose);
logger2.set_directory("logs/3");
}
}