@@ -73,11 +73,11 @@ def setup_logging():
7373 Environment Variables:
7474 GPUSTACK_RUNTIME_LOG_LEVEL
7575 Controls logging levels. Examples:
76- - "DEBUG" # All modules at DEBUG
77- - "runtime .module_a:DEBUG" # Only module_a module at DEBUG, other modules at INFO
78- - "module_a:DEBUG" # Same as above
79- - "runtime .module_a:DEBUG;runtime .module_b:INFO" # Multiple modules
80- - "ERROR;runtime .module_a:DEBUG" # All modules at ERROR, only module_a module at DEBUG
76+ - "DEBUG" # All modules at DEBUG
77+ - "gpustack_runtime .module_a:DEBUG" # Only module_a module at DEBUG, other modules at INFO
78+ - "module_a:DEBUG" # Same as above
79+ - "gpustack_runtime .module_a:DEBUG;gpustack_runtime .module_b:INFO" # Multiple modules
80+ - "ERROR;gpustack_runtime .module_a:DEBUG" # All modules at ERROR, only module_a module at DEBUG
8181
8282 GPUSTACK_RUNTIME_LOG_TO_FILE
8383 If set, specifies the file path for log output. When this variable is set,
@@ -101,6 +101,7 @@ def setup_logging():
101101 module_levels = _parse_module_levels (level_str )
102102
103103 formatter = logging .Formatter (DEFAULT_LOG_FORMAT )
104+ level = module_levels .get ("" , logging .INFO )
104105 handlers : list [logging .StreamHandler [Any ] | logging .FileHandler ] = []
105106 queue_handler = logging .handlers .QueueHandler (_LOG_QUEUE )
106107
@@ -115,25 +116,29 @@ def setup_logging():
115116 file_handler .setFormatter (formatter )
116117 handlers .append (file_handler )
117118
118- # Configure root logger
119- root_logger = logging .getLogger (__package__ )
120- root_logger .handlers .clear ()
121- root_logger .setLevel (logging . INFO )
122- root_logger .addHandler (queue_handler )
123- root_logger .propagate = False
119+ # Configure package logger
120+ package_logger = logging .getLogger (__package__ )
121+ package_logger .handlers .clear ()
122+ package_logger .setLevel (level )
123+ package_logger .addHandler (queue_handler )
124+ package_logger .propagate = False
124125
125- # Set default level
126- if "" in module_levels :
127- root_logger .setLevel (module_levels ["" ])
128-
129- # Configure module-specific levels
130- for module , level in module_levels .items ():
126+ # Configure module loggers
127+ for module , module_level in module_levels .items ():
131128 if module : # Skip default level
132- logger = logging .getLogger (f"{ __package__ } .{ module } " )
133- logger .handlers .clear ()
134- logger .addHandler (queue_handler )
135- logger .setLevel (level )
136- logger .propagate = False # Prevent message duplication
129+ module_logger = logging .getLogger (f"{ __package__ } .{ module } " )
130+ module_logger .handlers .clear ()
131+ module_logger .addHandler (queue_handler )
132+ module_logger .setLevel (module_level )
133+ module_logger .propagate = False
134+
135+ # Configure 3rd-party loggers, set slightly higher level than package level
136+ for _3rd in ["docker" , "kubernetes" ]:
137+ _3rd_logger = logging .getLogger (_3rd )
138+ _3rd_logger .handlers .clear ()
139+ _3rd_logger .addHandler (queue_handler )
140+ _3rd_logger .setLevel (max (logging .NOTSET , min (level + 10 , logging .CRITICAL )))
141+ _3rd_logger .propagate = False
137142
138143 _LOG_LISTENER = logging .handlers .QueueListener (
139144 _LOG_QUEUE ,
0 commit comments