Skip to content

Commit 4188fec

Browse files
authored
Use logger formatter to send log msgs via json rpc (#23405)
1 parent 8aa71ac commit 4188fec

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

native_locator/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ serde = { version = "1.0.152", features = ["derive"] }
1111
serde_json = "1.0.93"
1212
serde_repr = "0.1.10"
1313
regex = "1.10.4"
14+
log = "0.4.21"
15+
env_logger = "0.11.3"
1416

1517
[lib]
1618
doctest = false

native_locator/src/main.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
use global_virtualenvs::list_global_virtual_envs;
55
use known::EnvironmentApi;
66
use locator::Locator;
7+
use log::LevelFilter;
78
use messaging::{create_dispatcher, MessageDispatcher};
89
use std::time::SystemTime;
910

11+
use crate::messaging::initialize_logger;
12+
1013
mod common_python;
1114
mod conda;
1215
mod global_virtualenvs;
@@ -26,8 +29,9 @@ mod windows_python;
2629
fn main() {
2730
let mut dispatcher = create_dispatcher();
2831
let environment = EnvironmentApi {};
32+
initialize_logger(LevelFilter::Debug);
2933

30-
dispatcher.log_info("Starting Native Locator");
34+
log::info!("Starting Native Locator");
3135
let now = SystemTime::now();
3236

3337
let mut virtualenv_locator = virtualenv::VirtualEnv::new();
@@ -106,13 +110,10 @@ fn main() {
106110

107111
match now.elapsed() {
108112
Ok(elapsed) => {
109-
dispatcher.log_info(&format!(
110-
"Native Locator took {} milliseconds.",
111-
elapsed.as_millis()
112-
));
113+
log::info!("Native Locator took {} milliseconds.", elapsed.as_millis());
113114
}
114115
Err(e) => {
115-
dispatcher.log_error(&format!("Error getting elapsed time: {:?}", e));
116+
log::error!("Error getting elapsed time: {:?}", e);
116117
}
117118
}
118119

native_locator/src/messaging.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22
// Licensed under the MIT License.
33

44
use crate::logging::{LogLevel, LogMessage};
5+
use env_logger::Builder;
6+
use log::LevelFilter;
57
use serde::{Deserialize, Serialize};
68
use std::path::PathBuf;
79

810
pub trait MessageDispatcher {
911
fn report_environment_manager(&mut self, env: EnvManager) -> ();
1012
fn report_environment(&mut self, env: PythonEnvironment) -> ();
1113
fn exit(&mut self) -> ();
12-
fn log_debug(&mut self, message: &str) -> ();
13-
fn log_info(&mut self, message: &str) -> ();
14-
fn log_warning(&mut self, message: &str) -> ();
15-
fn log_error(&mut self, message: &str) -> ();
1614
}
1715

1816
#[derive(Serialize, Deserialize, Copy, Clone)]
@@ -185,14 +183,34 @@ impl ExitMessage {
185183
}
186184

187185
pub struct JsonRpcDispatcher {}
188-
fn send_message<T: serde::Serialize>(message: T) -> () {
186+
pub fn send_message<T: serde::Serialize>(message: T) -> () {
189187
let message = serde_json::to_string(&message).unwrap();
190188
print!(
191189
"Content-Length: {}\r\nContent-Type: application/vscode-jsonrpc; charset=utf-8\r\n\r\n{}",
192190
message.len(),
193191
message
194192
);
195193
}
194+
195+
pub fn initialize_logger(log_level: LevelFilter) {
196+
Builder::new()
197+
.format(|_, record| {
198+
let level = match record.level() {
199+
log::Level::Debug => LogLevel::Debug,
200+
log::Level::Error => LogLevel::Error,
201+
log::Level::Info => LogLevel::Info,
202+
log::Level::Warn => LogLevel::Warning,
203+
_ => LogLevel::Debug,
204+
};
205+
send_message(LogMessage::new(
206+
format!("{}", record.args()).to_string(),
207+
level,
208+
));
209+
Ok(())
210+
})
211+
.filter(None, log_level)
212+
.init();
213+
}
196214
impl MessageDispatcher for JsonRpcDispatcher {
197215
fn report_environment_manager(&mut self, env: EnvManager) -> () {
198216
send_message(EnvManagerMessage::new(env));
@@ -203,18 +221,6 @@ impl MessageDispatcher for JsonRpcDispatcher {
203221
fn exit(&mut self) -> () {
204222
send_message(ExitMessage::new());
205223
}
206-
fn log_debug(&mut self, message: &str) -> () {
207-
send_message(LogMessage::new(message.to_string(), LogLevel::Debug));
208-
}
209-
fn log_error(&mut self, message: &str) -> () {
210-
send_message(LogMessage::new(message.to_string(), LogLevel::Error));
211-
}
212-
fn log_info(&mut self, message: &str) -> () {
213-
send_message(LogMessage::new(message.to_string(), LogLevel::Info));
214-
}
215-
fn log_warning(&mut self, message: &str) -> () {
216-
send_message(LogMessage::new(message.to_string(), LogLevel::Warning));
217-
}
218224
}
219225

220226
pub fn create_dispatcher() -> JsonRpcDispatcher {

native_locator/tests/common.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ pub fn create_test_dispatcher() -> TestDispatcher {
4343
fn exit(&mut self) -> () {
4444
//
4545
}
46-
fn log_debug(&mut self, _message: &str) -> () {}
47-
fn log_error(&mut self, _message: &str) -> () {}
48-
fn log_info(&mut self, _message: &str) -> () {}
49-
fn log_warning(&mut self, _message: &str) -> () {}
5046
}
5147
impl TestMessages for TestDispatcher {
5248
fn get_messages(&self) -> Vec<String> {

0 commit comments

Comments
 (0)