@@ -16,7 +16,7 @@ use crate::cubesql_utils::with_session;
1616use crate :: logger:: NodeBridgeLogger ;
1717use crate :: sql4sql:: sql4sql;
1818use crate :: stream:: OnDrainHandler ;
19- use crate :: tokio_runtime_node;
19+ use crate :: { tokio_runtime_node} ;
2020use crate :: transport:: NodeBridgeTransport ;
2121use crate :: utils:: batch_to_rows;
2222use cubenativeutils:: wrappers:: neon:: context:: neon_run_with_guarded_lifetime;
@@ -31,9 +31,10 @@ use std::rc::Rc;
3131use std:: sync:: Arc ;
3232
3333use cubesql:: { telemetry:: ReportingLogger , CubeError } ;
34-
34+ use cubesql :: telemetry :: LocalReporter ;
3535use neon:: prelude:: * ;
3636use neon:: result:: Throw ;
37+ use simple_logger:: SimpleLogger ;
3738
3839pub ( crate ) struct SQLInterface {
3940 pub ( crate ) services : Arc < NodeCubeServices > ,
@@ -497,29 +498,34 @@ fn is_fallback_build(mut cx: FunctionContext) -> JsResult<JsBoolean> {
497498 Ok ( JsBoolean :: new ( & mut cx, true ) )
498499}
499500
500- pub fn setup_logger ( mut cx : FunctionContext ) -> JsResult < JsUndefined > {
501- let options = cx. argument :: < JsObject > ( 0 ) ?;
502- let cube_logger = options
503- . get :: < JsFunction , _ , _ > ( & mut cx, "logger" ) ?
504- . root ( & mut cx) ;
505-
506- let log_level_handle = options. get_value ( & mut cx, "logLevel" ) ?;
507- let log_level = if log_level_handle. is_a :: < JsString , _ > ( & mut cx) {
508- let value = log_level_handle. downcast_or_throw :: < JsString , _ > ( & mut cx) ?;
509- let log_level = match value. value ( & mut cx) . as_str ( ) {
501+ fn get_log_level_from_variable ( log_level_handle : Handle < JsValue > , cx : & mut FunctionContext ) -> NeonResult < log:: Level > {
502+ if log_level_handle. is_a :: < JsString , _ > ( cx) {
503+ let value = log_level_handle. downcast_or_throw :: < JsString , _ > ( cx) ?;
504+ let log_level = match value. value ( cx) . as_str ( ) {
510505 "error" => log:: Level :: Error ,
511506 "warn" => log:: Level :: Warn ,
512507 "info" => log:: Level :: Info ,
513508 "debug" => log:: Level :: Debug ,
514509 "trace" => log:: Level :: Trace ,
515510 x => cx. throw_error ( format ! ( "Unrecognized log level: {}" , x) ) ?,
516511 } ;
517- log_level
512+
513+ Ok ( log_level)
518514 } else {
519- log:: Level :: Trace
520- } ;
515+ Ok ( log:: Level :: Trace )
516+ }
517+ }
518+
519+ pub fn setup_logger ( mut cx : FunctionContext ) -> JsResult < JsUndefined > {
520+ let options = cx. argument :: < JsObject > ( 0 ) ?;
521+ let cube_logger = options
522+ . get :: < JsFunction , _ , _ > ( & mut cx, "logger" ) ?
523+ . root ( & mut cx) ;
521524
522- let logger = crate :: create_logger ( log_level) ;
525+ let log_level_handle = options. get_value ( & mut cx, "logLevel" ) ?;
526+ let log_level = get_log_level_from_variable ( log_level_handle, & mut cx) ?;
527+
528+ let logger = create_logger ( log_level) ;
523529 log_reroute:: reroute_boxed ( Box :: new ( logger) ) ;
524530
525531 ReportingLogger :: init (
@@ -531,6 +537,37 @@ pub fn setup_logger(mut cx: FunctionContext) -> JsResult<JsUndefined> {
531537 Ok ( cx. undefined ( ) )
532538}
533539
540+ pub fn create_logger ( log_level : log:: Level ) -> SimpleLogger {
541+ SimpleLogger :: new ( )
542+ . with_level ( log:: Level :: Error . to_level_filter ( ) )
543+ . with_module_level ( "cubesql" , log_level. to_level_filter ( ) )
544+ . with_module_level ( "cubejs_native" , log_level. to_level_filter ( ) )
545+ . with_module_level ( "datafusion" , log:: Level :: Warn . to_level_filter ( ) )
546+ . with_module_level ( "pg_srv" , log:: Level :: Warn . to_level_filter ( ) )
547+ }
548+
549+ pub fn setup_local_logger ( log_level : log:: Level ) {
550+ let logger = create_logger ( log_level) ;
551+ log_reroute:: reroute_boxed ( Box :: new ( logger) ) ;
552+
553+ ReportingLogger :: init (
554+ Box :: new ( LocalReporter :: new ( ) ) ,
555+ log:: Level :: Error . to_level_filter ( ) ,
556+ )
557+ . unwrap ( ) ;
558+ }
559+
560+ pub fn reset_logger ( mut cx : FunctionContext ) -> JsResult < JsUndefined > {
561+ let options = cx. argument :: < JsObject > ( 0 ) ?;
562+
563+ let log_level_handle = options. get_value ( & mut cx, "logLevel" ) ?;
564+ let log_level = get_log_level_from_variable ( log_level_handle, & mut cx) ?;
565+
566+ setup_local_logger ( log_level) ;
567+
568+ Ok ( cx. undefined ( ) )
569+ }
570+
534571//============ sql planner ===================
535572
536573fn build_sql_and_params ( cx : FunctionContext ) -> JsResult < JsValue > {
@@ -570,6 +607,7 @@ pub fn register_module_exports<C: NodeConfiguration + 'static>(
570607 mut cx : ModuleContext ,
571608) -> NeonResult < ( ) > {
572609 cx. export_function ( "setupLogger" , setup_logger) ?;
610+ cx. export_function ( "resetLogger" , reset_logger) ?;
573611 cx. export_function ( "registerInterface" , register_interface :: < C > ) ?;
574612 cx. export_function ( "shutdownInterface" , shutdown_interface) ?;
575613 cx. export_function ( "execSql" , exec_sql) ?;
0 commit comments