logger.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. pub use log::{LevelFilter, trace, debug, info, warn, error};
  2. use chrono::Local;
  3. use std::fs::OpenOptions;
  4. use std::io::Write;
  5. use std::path;
  6. use crate::fs_util::{dir_exists, mkdir as create_dir};
  7. /// Must be done before any log macros can work
  8. ///
  9. /// data/logs/moonmud-MM-DD-YYYY.log
  10. pub fn init_logging(level: LevelFilter) -> bool {
  11. let f = String::from("data/logs");
  12. if !dir_exists(&f) {
  13. if !create_dir(&f) {
  14. return false;
  15. }
  16. }
  17. let mut pth = path::PathBuf::new();
  18. pth.push(f);
  19. let log_filename = format!("moonmud-{0}.log", Local::now().format("%m-%d-%Y"));
  20. pth.push(log_filename);
  21. let target = Box::new(
  22. OpenOptions::new()
  23. .write(true)
  24. .append(true)
  25. .create(true)
  26. .open(&pth)
  27. .expect(format!("Can't open log file (write/append/create): {}", &pth.as_path().to_string_lossy()).as_str()),
  28. );
  29. env_logger::Builder::new()
  30. .target(env_logger::Target::Pipe(target))
  31. .format(|buf, record| {
  32. writeln!(
  33. buf,
  34. "[{} {:5} {}:{}] {}",
  35. Local::now().format("%Y-%m-%d %H:%M:%S%.3f"),
  36. record.level(),
  37. record.file().unwrap_or("unknown"),
  38. record.line().unwrap_or(0),
  39. record.args()
  40. )
  41. })
  42. .filter(None, level)
  43. .init();
  44. return true;
  45. }