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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#![allow(unknown_lints)]
#![warn(clippy::all, rust_2018_idioms, rust_2018_compatibility)]
#![allow(clippy::rc_buffer)] // https://github.com/rust-lang/rust-clippy/issues/6170

mod artifact_cache;
mod asset_hub;
mod asset_hub_service;
mod capnp_db;
mod daemon;
mod error;
mod file_asset_source;
mod file_tracker;
mod scope;
mod serialized_asset;
mod source_pair_import;
mod watcher;

pub use crate::{
    daemon::{default_importer_contexts, default_importers, AssetDaemon, ImporterMap},
    error::{Error, Result},
};

#[cfg(debug_assertions)]
const DEFAULT_LOGGING_LEVEL: log::LevelFilter = log::LevelFilter::Debug;
#[cfg(not(debug_assertions))]
const DEFAULT_LOGGING_LEVEL: log::LevelFilter = log::LevelFilter::Info;

mod simple_logger {
    use log::{Level, Metadata, Record};

    pub struct SimpleLogger;

    impl log::Log for SimpleLogger {
        fn enabled(&self, metadata: &Metadata<'_>) -> bool {
            metadata.level() <= Level::Info
        }

        fn log(&self, record: &Record<'_>) {
            if self.enabled(record.metadata()) {
                println!("{} - {}", record.level(), record.args());
            }
        }

        fn flush(&self) {}
    }
}
#[cfg(not(feature = "pretty_log"))]
static LOGGER: simple_logger::SimpleLogger = simple_logger::SimpleLogger;

#[cfg(not(feature = "pretty_log"))]
pub fn init_logging() -> Result<()> {
    let rust_log = std::env::var("RUST_LOG").unwrap_or_else(|_| "".to_string());
    let log_level = <log::LevelFilter as std::str::FromStr>::from_str(&rust_log)
        .unwrap_or(DEFAULT_LOGGING_LEVEL);
    log::set_logger(&LOGGER)
        .map(|()| log::set_max_level(log_level))
        .map_err(Error::SetLoggerError)
}
#[cfg(feature = "pretty_log")]
pub fn init_logging() -> Result<()> {
    use chrono::Local;
    let rust_log = std::env::var("RUST_LOG").unwrap_or_else(|_| "".to_string());
    let log_level = <log::LevelFilter as std::str::FromStr>::from_str(&rust_log)
        .unwrap_or(DEFAULT_LOGGING_LEVEL);
    fern::Dispatch::new()
        .format(|out, message, record| {
            out.finish(format_args!(
                "[{timestamp}][{level}][{target}] {message}",
                level = record.level(),
                timestamp = Local::now().format("%Y-%m-%dT%H:%M:%S%.3f"),
                target = record.target(),
                message = message,
            ))
        })
        .chain(std::io::stdout())
        .level(log_level)
        .level_for("mio", log::LevelFilter::Info)
        .level_for("tokio_core", log::LevelFilter::Info)
        // .chain(fern::log_file("output.log")?)
        .apply()?;
    Ok(())
}