123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- //! A logger that prints all messages with a readable output format.
- extern crate log;
- extern crate chrono;
- #[cfg(feature = "colored")] extern crate colored;
- #[cfg(feature = "colored")] use colored::*;
- use log::{Log,Level,Metadata,Record,SetLoggerError};
- use chrono::Local;
- struct SimpleLogger {
- level: Level,
- }
- impl Log for SimpleLogger {
- fn enabled(&self, metadata: &Metadata) -> bool {
- metadata.level() <= self.level
- }
- fn log(&self, record: &Record) {
- if self.enabled(record.metadata()) {
- let level_string = {
- #[cfg(feature = "colored")] {
- match record.level() {
- Level::Error => record.level().to_string().red(),
- Level::Warn => record.level().to_string().yellow(),
- Level::Info => record.level().to_string().cyan(),
- Level::Debug => record.level().to_string().purple(),
- Level::Trace => record.level().to_string().normal(),
- }
- }
- #[cfg(not(feature = "colored"))] {
- record.level().to_string()
- }
- };
- let target = if record.target().len() > 0 {
- record.target()
- } else {
- record.module_path().unwrap_or_default()
- };
- println!(
- "{} {:<5} [{}] {}",
- Local::now().format("%Y-%m-%d %H:%M:%S,%3f"),
- level_string,
- target,
- record.args());
- }
- }
- fn flush(&self) {
- }
- }
- /// Initializes the global logger with a SimpleLogger instance with
- /// `max_log_level` set to a specific log level.
- ///
- /// ```
- /// # #[macro_use] extern crate log;
- /// # extern crate simple_logger;
- /// #
- /// # fn main() {
- /// simple_logger::init_with_level(log::Level::Warn).unwrap();
- ///
- /// warn!("This is an example message.");
- /// info!("This message will not be logged.");
- /// # }
- /// ```
- pub fn init_with_level(level: Level) -> Result<(), SetLoggerError> {
- let logger = SimpleLogger { level };
- log::set_boxed_logger(Box::new(logger))?;
- log::set_max_level(level.to_level_filter());
- Ok(())
- }
- /// Initializes the global logger with a SimpleLogger instance with
- /// `max_log_level` set to `LogLevel::Trace`.
- ///
- /// ```
- /// # #[macro_use] extern crate log;
- /// # extern crate simple_logger;
- /// #
- /// # fn main() {
- /// simple_logger::init().unwrap();
- /// warn!("This is an example message.");
- /// # }
- /// ```
- pub fn init() -> Result<(), SetLoggerError> {
- init_with_level(Level::Trace)
- }
|