deno.land / x / deno@v1.28.2 / cli / logger.rs

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
// 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.");}
deno

Version Info

Tagged at
a year ago