distill_daemon/
lib.rs

1#![allow(unknown_lints)]
2#![warn(clippy::all, rust_2018_idioms, rust_2018_compatibility)]
3#![allow(clippy::rc_buffer)] // https://github.com/rust-lang/rust-clippy/issues/6170
4
5mod artifact_cache;
6mod asset_hub;
7mod asset_hub_service;
8mod capnp_db;
9mod daemon;
10mod error;
11mod file_asset_source;
12mod file_tracker;
13mod scope;
14mod serialized_asset;
15mod source_pair_import;
16mod watcher;
17
18pub use crate::{
19    daemon::{default_importer_contexts, default_importers, AssetDaemon, ImporterMap},
20    error::{Error, Result},
21};
22
23#[cfg(debug_assertions)]
24const DEFAULT_LOGGING_LEVEL: log::LevelFilter = log::LevelFilter::Debug;
25#[cfg(not(debug_assertions))]
26const DEFAULT_LOGGING_LEVEL: log::LevelFilter = log::LevelFilter::Info;
27
28mod simple_logger {
29    use log::{Level, Metadata, Record};
30
31    pub struct SimpleLogger;
32
33    impl log::Log for SimpleLogger {
34        fn enabled(&self, metadata: &Metadata<'_>) -> bool {
35            metadata.level() <= Level::Info
36        }
37
38        fn log(&self, record: &Record<'_>) {
39            if self.enabled(record.metadata()) {
40                println!("{} - {}", record.level(), record.args());
41            }
42        }
43
44        fn flush(&self) {}
45    }
46}
47#[cfg(not(feature = "pretty_log"))]
48static LOGGER: simple_logger::SimpleLogger = simple_logger::SimpleLogger;
49
50#[cfg(not(feature = "pretty_log"))]
51pub fn init_logging() -> Result<()> {
52    let rust_log = std::env::var("RUST_LOG").unwrap_or_else(|_| "".to_string());
53    let log_level = <log::LevelFilter as std::str::FromStr>::from_str(&rust_log)
54        .unwrap_or(DEFAULT_LOGGING_LEVEL);
55    log::set_logger(&LOGGER)
56        .map(|()| log::set_max_level(log_level))
57        .map_err(Error::SetLoggerError)
58}
59#[cfg(feature = "pretty_log")]
60pub fn init_logging() -> Result<()> {
61    use chrono::Local;
62    let rust_log = std::env::var("RUST_LOG").unwrap_or_else(|_| "".to_string());
63    let log_level = <log::LevelFilter as std::str::FromStr>::from_str(&rust_log)
64        .unwrap_or(DEFAULT_LOGGING_LEVEL);
65    fern::Dispatch::new()
66        .format(|out, message, record| {
67            out.finish(format_args!(
68                "[{timestamp}][{level}][{target}] {message}",
69                level = record.level(),
70                timestamp = Local::now().format("%Y-%m-%dT%H:%M:%S%.3f"),
71                target = record.target(),
72                message = message,
73            ))
74        })
75        .chain(std::io::stdout())
76        .level(log_level)
77        .level_for("mio", log::LevelFilter::Info)
78        .level_for("tokio_core", log::LevelFilter::Info)
79        // .chain(fern::log_file("output.log")?)
80        .apply()?;
81    Ok(())
82}