diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-11-28 17:28:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-28 17:28:54 -0500 |
commit | 2d4c46c975eb916dc622cc729a1a8d397582a76f (patch) | |
tree | 445e819117acd2f94ffc9d7da7ed8e3e604435d0 /cli/util/logger.rs | |
parent | f526513d74d34ac254aa40ef9b73238cb21c395b (diff) |
refactor: create util folder, move nap_sym to napi/sym, move http_cache to cache folder (#16857)
Diffstat (limited to 'cli/util/logger.rs')
-rw-r--r-- | cli/util/logger.rs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/cli/util/logger.rs b/cli/util/logger.rs new file mode 100644 index 000000000..caa027c04 --- /dev/null +++ b/cli/util/logger.rs @@ -0,0 +1,79 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +use std::io::Write; + +struct CliLogger(env_logger::Logger); + +impl CliLogger { + pub fn new(logger: env_logger::Logger) -> Self { + Self(logger) + } + + pub fn filter(&self) -> log::LevelFilter { + self.0.filter() + } +} + +impl log::Log for CliLogger { + fn enabled(&self, metadata: &log::Metadata) -> bool { + self.0.enabled(metadata) + } + + fn log(&self, record: &log::Record) { + if self.enabled(record.metadata()) { + self.0.log(record); + } + } + + fn flush(&self) { + self.0.flush(); + } +} + +pub fn init(maybe_level: Option<log::Level>) { + let log_level = maybe_level.unwrap_or(log::Level::Info); + let logger = env_logger::Builder::from_env( + env_logger::Env::default() + .default_filter_or(log_level.to_level_filter().to_string()), + ) + // https://github.com/denoland/deno/issues/6641 + .filter_module("rustyline", log::LevelFilter::Off) + // wgpu crates (gfx_backend), have a lot of useless INFO and WARN logs + .filter_module("wgpu", log::LevelFilter::Error) + .filter_module("gfx", log::LevelFilter::Error) + // used to make available the lsp_debug which is then filtered out at runtime + // in the cli logger + .filter_module("deno::lsp::performance", log::LevelFilter::Debug) + .format(|buf, record| { + let mut target = record.target().to_string(); + if let Some(line_no) = record.line() { + target.push(':'); + target.push_str(&line_no.to_string()); + } + if record.level() <= log::Level::Info + || (record.target() == "deno::lsp::performance" + && record.level() == log::Level::Debug) + { + // Print ERROR, WARN, INFO and lsp_debug logs as they are + writeln!(buf, "{}", record.args()) + } else { + // Add prefix to DEBUG or TRACE logs + writeln!( + buf, + "{} RS - {} - {}", + record.level(), + target, + record.args() + ) + } + }) + .build(); + + let cli_logger = CliLogger::new(logger); + let max_level = cli_logger.filter(); + let r = log::set_boxed_logger(Box::new(cli_logger)); + if r.is_ok() { + log::set_max_level(max_level); + } + r.expect("Could not install logger."); +} |