1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
//! A logger implementation to use RTT with the Rust `log` crate.
//!
//! ```
//! use log::{info, LevelFilter};
//! use rtt_logger::RTTLogger;
//! use rtt_target::rtt_init_print;
//!
//! // logger configuration
//! const LOG_LEVEL: LevelFilter = LevelFilter::Info;
//! static LOGGER: RTTLogger = RTTLogger::new(LOG_LEVEL);
//!
//! fn main() {
//! // logger setup
//! rtt_init_print!();
//! log::set_logger(&LOGGER)
//! .map(|()| log::set_max_level(LOG_LEVEL))
//! .unwrap();
//!
//! // logger usage in main binary or in any library
//! info!("Hello World!");
//! }
//! ```
#![no_std]
use log::{LevelFilter, Metadata, Record};
use rtt_target::*;
/// An RTT-based logger implementation.
pub struct RTTLogger {
level_filter: LevelFilter,
}
impl RTTLogger {
/// Static-friendly const initializer.
///
/// * `level_filter`: The default level to enable.
pub const fn new(level_filter: LevelFilter) -> RTTLogger {
RTTLogger { level_filter }
}
}
impl log::Log for RTTLogger {
fn enabled(&self, metadata: &Metadata) -> bool {
self.level_filter.ge(&metadata.level())
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
rprintln!("{} - {}", record.level(), record.args());
}
}
fn flush(&self) {}
}