11"""
22Simple logger module for the Hiero SDK.
3+
4+ This module provides a custom wrapper around Python's standard logging module,
5+ adding support for custom log levels (TRACE, DISABLED) and simplifying log
6+ configuration within the SDK.
37"""
48
59import logging
1317_DISABLED_LEVEL = LogLevel .DISABLED .value
1418_TRACE_LEVEL = LogLevel .TRACE .value
1519logging .addLevelName (_DISABLED_LEVEL , "DISABLED" )
16- logging .addLevelName (_TRACE_LEVEL , "TRACE" )
20+ logging .addLevelName (_TRACE_LEVEL , "TRACE" )
1721
1822class Logger :
1923 """
20- Custom logger that wraps Python's logging module
24+ Custom logger that wraps Python's logging module for Hiero SDK use.
25+
26+ This class handles configuration, formatting, and logging operations across
27+ various log levels, including custom SDK levels (TRACE, DISABLED).
2128 """
2229
2330 def __init__ (self , level : Optional [LogLevel ] = None , name : Optional [str ] = None ) -> None :
2431 """
25- Constructor
32+ Initializes the Logger instance for the Hiero SDK.
2633
2734 Args:
28- level (LogLevel, optional): the current log level
29- name (str, optional): logger name, defaults to class name
35+ level (LogLevel, optional): The current minimum log level. Defaults to TRACE.
36+ name (str, optional): The logger name. Defaults to "hiero_sdk_python".
3037 """
3138
3239 # Get logger name
@@ -49,7 +56,15 @@ def __init__(self, level: Optional[LogLevel] = None, name: Optional[str] = None)
4956 self .set_level (self .level )
5057
5158 def set_level (self , level : Union [LogLevel , str ]) -> "Logger" :
52- """Set log level"""
59+ """
60+ Sets the current logging level for the SDK logger.
61+
62+ Args:
63+ level (Union[LogLevel, str]): The new minimum log level. Can be a LogLevel enum or a string (e.g., "INFO").
64+
65+ Returns:
66+ Logger: The current Logger instance (for chaining).
67+ """
5368 if isinstance (level , str ):
5469 level = LogLevel .from_string (level )
5570
@@ -65,11 +80,24 @@ def set_level(self, level: Union[LogLevel, str]) -> "Logger":
6580 return self
6681
6782 def get_level (self ) -> LogLevel :
68- """Get current log level"""
83+ """
84+ Retrieves the current logging level set for the SDK logger.
85+
86+ Returns:
87+ LogLevel: The current minimum logging level.
88+ """
6989 return self .level
7090
7191 def set_silent (self , is_silent : bool ) -> "Logger" :
72- """Enable/disable silent mode"""
92+ """
93+ Enables or disables silent mode (disabling all logging output).
94+
95+ Args:
96+ is_silent (bool): If True, disables logging entirely. If False, logging is re-enabled.
97+
98+ Returns:
99+ Logger: The current Logger instance (for chaining).
100+ """
73101 if is_silent :
74102 self .internal_logger .disabled = True
75103 else :
@@ -78,7 +106,18 @@ def set_silent(self, is_silent: bool) -> "Logger":
78106 return self
79107
80108 def _format_args (self , message : str , args : Sequence [object ]) -> str :
81- """Format key-value pairs into string"""
109+ """
110+ Formats a message with optional key-value pairs into a clean string format.
111+
112+ Args:
113+ message (str): The main log message.
114+ args (Sequence[object]): A sequence of objects supplied as alternating
115+ keys and values (e.g., "key1", value1, "key2", value2).
116+
117+ Returns:
118+ str: The formatted log string, or just the original message if arguments
119+ are not supplied correctly (not an even number).
120+ """
82121 if not args or len (args ) % 2 != 0 :
83122 return message
84123 pairs = []
@@ -87,27 +126,59 @@ def _format_args(self, message: str, args: Sequence[object]) -> str:
87126 return f"{ message } : { ', ' .join (pairs )} "
88127
89128 def trace (self , message : str , * args : object ) -> None :
90- """Log at TRACE level"""
129+ """
130+ Logs a message at the TRACE level (lowest verbosity).
131+
132+ Args:
133+ message (str): The main log message.
134+ *args (object): Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
135+ """
91136 if self .internal_logger .isEnabledFor (_TRACE_LEVEL ):
92137 self .internal_logger .log (_TRACE_LEVEL , self ._format_args (message , args ))
93138
94139 def debug (self , message : str , * args : object ) -> None :
95- """Log at DEBUG level"""
140+ """
141+ Logs a message at the DEBUG level.
142+
143+ Args:
144+ message (str): The main log message.
145+ *args (object): Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
146+ """
96147 if self .internal_logger .isEnabledFor (LogLevel .DEBUG .value ):
97148 self .internal_logger .debug (self ._format_args (message , args ))
98149
99150 def info (self , message : str , * args : object ) -> None :
100- """Log at INFO level"""
151+ """
152+ Logs a message at the INFO level.
153+
154+ Args:
155+ message (str): The main log message.
156+ *args (object): Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
157+ """
101158 if self .internal_logger .isEnabledFor (LogLevel .INFO .value ):
102159 self .internal_logger .info (self ._format_args (message , args ))
103160
104161 def warning (self , message : str , * args : object ) -> None :
105- """Log at WARNING level"""
162+ """
163+ Logs a message at the WARNING level.
164+
165+ Args:
166+ message (str): The main log message.
167+ *args (object): Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
168+ """
106169 if self .internal_logger .isEnabledFor (LogLevel .WARNING .value ):
107170 self .internal_logger .warning (self ._format_args (message , args ))
108171
109172 def warn (self , message : str , * args ) -> None :
110- """Legacy warn method replaced by warning"""
173+ """
174+ Legacy method for logging a message at the WARNING level.
175+
176+ This method is deprecated; use `Logger.warning()` instead.
177+
178+ Args:
179+ message (str): The main log message.
180+ *args: Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
181+ """
111182 warnings .warn (
112183 "Logger.warn() is deprecated; use Logger.warning()" ,
113184 category = FutureWarning ,
@@ -117,14 +188,32 @@ def warn(self, message: str, *args) -> None:
117188 self .warning (message , * args )
118189
119190 def error (self , message : str , * args : object ) -> None :
120- """Log at ERROR level"""
191+ """
192+ Logs a message at the ERROR level.
193+
194+ Args:
195+ message (str): The main log message.
196+ *args (object): Optional key-value pairs (key, value, key, value, ...) to be appended to the message.
197+ """
121198 if self .internal_logger .isEnabledFor (LogLevel .ERROR .value ):
122199 self .internal_logger .error (self ._format_args (message , args ))
123200
124201def get_logger (
125202 level : Optional [LogLevel ] = None ,
126- name : Optional [str ] = None ,
203+ name : Optional [str ] = None ,
127204) -> Logger :
205+ """
206+ Returns a configured Logger instance.
207+
208+ This function is provided for convenience and handles a legacy parameter order swap.
209+
210+ Args:
211+ level (Optional[LogLevel]): The initial log level to set.
212+ name (Optional[str]): The name of the logger instance.
213+
214+ Returns:
215+ Logger: A new or existing configured Logger instance.
216+ """
128217 # Legacy method: pass in name, level
129218 if isinstance (level , str ) and isinstance (name , LogLevel ):
130219 warnings .warn (
0 commit comments