Expand description
Logger of ROS2.
§Examples
§Basics
use oxidros::{logger::Logger, pr_debug, pr_error, pr_fatal, pr_info, pr_warn};
let logger = Logger::new("my_logger");
let some_value = 100;
pr_debug!(logger, "debug: {some_value}");
pr_info!(logger, "information: {some_value}");
pr_warn!(logger, "warning: {some_value}");
pr_error!(logger, "error: {some_value}");
pr_fatal!(logger, "fatal: {some_value}");§Callback Functions of Single Threaded Execution
use std::{rc::Rc, time::Duration};
use oxidros::{context::Context, logger::Logger, pr_error, pr_info};
let ctx = Context::new().unwrap();
let mut selector = ctx.create_selector().unwrap();
// Use Rc to share the logger by multiple callback functions.
let logger = Logger::new("my_logger");
let logger = Rc::new(logger);
let logger1 = logger.clone();
selector.add_wall_timer(
"timer1", // name of the timer
Duration::from_millis(100),
Box::new(move || pr_info!(logger1, "some information")),
);
selector.add_wall_timer(
"timer2", // name of the timer
Duration::from_millis(150),
Box::new(move || pr_error!(logger, "some error")),
);§Multi Threaded
use oxidros::{logger::Logger, pr_info, pr_warn};
use std::sync::Arc;
let logger = Logger::new("my_logger");
// Use Arc to share a logger by multiple threads.
let logger = Arc::new(logger);
let logger1 = logger.clone();
let th1 = std::thread::spawn(move || pr_info!(logger1, "some information"));
let th2 = std::thread::spawn(move || pr_warn!(logger, "some warning"));
th1.join().unwrap();
th2.join().unwrap();Structs§
- Logger
- Logger of ROS2. The methods of Logger are called by pr_* macros. Use these macros instead of the methods.