[go: up one dir, main page]

Module logger

Module logger 

Source
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.