lib.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //! A logger that prints all messages with a readable output format.
  2. extern crate log;
  3. extern crate time;
  4. use log::{Log,LogLevel,LogMetadata,LogRecord,SetLoggerError};
  5. struct SimpleLogger {
  6. log_level: LogLevel,
  7. }
  8. impl Log for SimpleLogger {
  9. fn enabled(&self, metadata: &LogMetadata) -> bool {
  10. metadata.level() <= self.log_level
  11. }
  12. fn log(&self, record: &LogRecord) {
  13. if self.enabled(record.metadata()) {
  14. println!(
  15. "{} {:<5} [{}] {}",
  16. time::strftime("%Y-%m-%d %H:%M:%S", &time::now()).unwrap(),
  17. record.level().to_string(),
  18. record.location().module_path(),
  19. record.args());
  20. }
  21. }
  22. }
  23. /// Initializes the global logger with a SimpleLogger instance with `max_log_level` set to
  24. /// the specified log level.
  25. pub fn init_with_level(log_level: LogLevel) -> Result<(), SetLoggerError> {
  26. log::set_logger(|max_log_level| {
  27. max_log_level.set(log_level.to_log_level_filter());
  28. return Box::new(SimpleLogger { log_level: log_level });
  29. })
  30. }
  31. /// Initializes the global logger with a SimpleLogger instance with `max_log_level` set to
  32. /// `LogLevel::Trace`.
  33. pub fn init() -> Result<(), SetLoggerError> {
  34. init_with_level(LogLevel::Trace)
  35. }