1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! Rust log-compatible pretty/ndjson logger, based on femme
//!
//! ## Examples
//! ```
//! minifemme::start(minifemme::LevelFilter::Info, minifemme::LogMode::Pretty);
//! log::warn!("Unauthorized access attempt on /login");
//! log::info!("Listening on port 8080");
//! ```

pub use log::LevelFilter;

#[cfg(not(target_arch = "wasm32"))]
mod ndjson;

#[cfg(not(target_arch = "wasm32"))]
mod pretty;

#[cfg(target_arch = "wasm32")]
mod wasm;

/// Selects between ndjson-based logging or pretty-printed
/// logging.
pub enum LogMode {
    /// Log as NdJson
    NdJson,
    /// Log in a nice, pleasing format
    Pretty,
}

/// Starts logging with a log level and log mode.
/// All messages under the specified log level will statically be filtered out.
/// The logger will use the mode specified. This can't be changed later.
/// (Except if the program is running in a WASM environment.)
///
/// ```
/// minifemme::start(minifemme::LevelFilter::Info, minifemme::LogMode::Pretty);
/// log::warn!("Unauthorized access attempt on /login");
/// log::info!("Listening on port 8080");
/// ```
pub fn start(level: LevelFilter, mode: LogMode) {
    #[cfg(target_arch = "wasm32")]
    wasm::start(level);

    #[cfg(not(target_arch = "wasm32"))]
    match mode {
        LogMode::NdJson => ndjson::start(level),
        LogMode::Pretty => pretty::start(level),
    }
}