1#![warn(missing_docs)]
8
9use std::sync::Arc;
10
11pub mod buffer;
12pub mod builder;
13pub mod error;
14pub mod format;
15pub mod level;
16pub mod logger;
17pub mod macros;
18pub mod record;
19pub mod sink;
20
21pub use crate::builder::AsyncLoggerBuilder;
23pub use crate::format::{DefaultFormatter, Formatter, JsonFormatter, SimpleFormatter};
24pub use crate::level::Level;
25pub use crate::logger::{AsyncLogger, GlobalLogger, global_logger, init_global_logger};
26pub use crate::record::Record;
29pub use crate::sink::{CompositeSink, ConsoleSink, FileSink, MemorySink, NullSink, Sink};
30
31pub fn init(logger: Arc<AsyncLogger>) -> Result<(), crate::error::Error> {
53 init_global_logger(logger)
54}
55
56pub fn get_logger() -> Option<&'static GlobalLogger> {
67 global_logger()
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73 use std::time::Duration;
74
75 #[test]
76 fn test_api_compilation() {
77 let formatter = Arc::new(DefaultFormatter::new());
79 let sink = Arc::new(ConsoleSink::new());
80
81 let logger = Arc::new(AsyncLogger::new(
82 Level::Debug,
83 formatter,
84 sink,
85 1000,
86 10,
87 Duration::from_millis(100),
88 ));
89
90 let record = Record::new(
92 Level::Info,
93 "test",
94 "test.rs",
95 1,
96 "Test message".to_string(),
97 );
98
99 assert!(logger.log(record).is_ok());
101 assert!(logger.flush().is_ok());
102 assert!(logger.shutdown().is_ok());
103 }
104}