Skip to content

Commit e0bc5f5

Browse files
authored
docs: Add complete Google-style docstrings to Logger module (#639) (#641)
Signed-off-by: Raja Rathour <imraja729@gmail.com>
1 parent 8ed62ad commit e0bc5f5

File tree

2 files changed

+106
-17
lines changed

2 files changed

+106
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ This changelog is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.
99
### Added
1010

1111
- Add Google-style docstrings to `AccountInfo` class and its methods in `account_info.py`.
12-
12+
- Added comprehensive Google-style docstrings to the `Logger` class and all utility functions in `src/hiero_sdk_python/logger/logger.py` (#639).
1313
- add AccountRecordsQuery class
1414

1515
### Changed

src/hiero_sdk_python/logger/logger.py

Lines changed: 105 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
"""
22
Simple 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

59
import logging
@@ -13,20 +17,23 @@
1317
_DISABLED_LEVEL = LogLevel.DISABLED.value
1418
_TRACE_LEVEL = LogLevel.TRACE.value
1519
logging.addLevelName(_DISABLED_LEVEL, "DISABLED")
16-
logging.addLevelName(_TRACE_LEVEL, "TRACE")
20+
logging.addLevelName(_TRACE_LEVEL, "TRACE")
1721

1822
class 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

124201
def 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

Comments
 (0)