1mod logger;
2
3pub use logger::{appender::*, logger::*, writer::*};
4
5pub type Logger = BaseLogger<NopAppender>;
7pub type StdoutLogger = BaseLogger<NopAppender, Stdout>;
9pub type FileLogger = BaseLogger<NopAppender, LogFileWriter>;
11
12#[macro_export]
26macro_rules! log_print {
27 ($level:path, $($arg:tt)*) => {
28 $crate::Logger::print($level, module_path!(), &format!($($arg)*));
29 };
30}
31
32#[test]
33fn test_log_appender() {
34 use std::io::Write;
35
36 use log::LevelFilter;
37
38 struct PIDLogAppender;
39
40 impl LogAppender for PIDLogAppender {
41 fn append<W: Write>(stream: &mut W) -> bool {
42 let pid = std::process::id();
43 let _ = write!(stream, "[PID: {pid}]");
44 true
45 }
46 }
47
48 type MyLogger = BaseLogger<PIDLogAppender>;
49 MyLogger::init(LevelFilter::Debug);
50
51 log::error!("test log message");
52}
53
54#[test]
55fn test_log_print_macro() {
56 use log::Level;
57
58 log_print!(Level::Debug, "test log message with log_print!");
59}
60
61#[ignore]
62#[test]
63fn test_log_file_writer() {
64 use std::fs;
65
66 use log::LevelFilter;
67
68 let file = fs::OpenOptions::new().create(true).write(true).truncate(true).open("test_log.txt").unwrap();
69 FileLogger::init(LevelFilter::Info, file);
70 log::error!("test log message to file");
71 assert!(String::from_utf8(fs::read("test_log.txt").unwrap()).unwrap().contains("test log message"));
72 fs::remove_file("test_log.txt").unwrap();
73}