22// Licensed under the MIT License.
33
44use crate :: logging:: { LogLevel , LogMessage } ;
5+ use env_logger:: Builder ;
6+ use log:: LevelFilter ;
57use serde:: { Deserialize , Serialize } ;
68use std:: path:: PathBuf ;
79
810pub 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
187185pub 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 \n Content-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+ }
196214impl 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
220226pub fn create_dispatcher ( ) -> JsonRpcDispatcher {
0 commit comments