Skip to content

Commit 77d0a1a

Browse files
fix(socket_mode): check the effective log level in debug guards (#1965)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent b9f4666 commit 77d0a1a

7 files changed

Lines changed: 60 additions & 43 deletions

File tree

‎slack_sdk/socket_mode/aiohttp/__init__.py‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,19 @@ async def monitor_current_session(self) -> None:
143143
session: ClientWebSocketResponse = self.current_session # type: ignore[assignment]
144144
session_id: str = self.build_session_id(session)
145145

146-
if self.logger.level <= logging.DEBUG:
146+
if self.logger.isEnabledFor(logging.DEBUG):
147147
self.logger.debug(f"A new monitor_current_session() execution loop for {session_id} started")
148148
try:
149149
logging_interval = 100
150150
counter_for_logging = 0
151151

152152
while not self.closed:
153153
if session != self.current_session:
154-
if self.logger.level <= logging.DEBUG:
154+
if self.logger.isEnabledFor(logging.DEBUG):
155155
self.logger.debug(f"The monitor_current_session task for {session_id} is now cancelled")
156156
break
157157
try:
158-
if self.trace_enabled and self.logger.level <= logging.DEBUG:
158+
if self.trace_enabled and self.logger.isEnabledFor(logging.DEBUG):
159159
# The logging here is for detailed investigation on potential issues in this client.
160160
# If you don't see this log for a while, it means that
161161
# this receive_messages execution is no longer working for some reason.
@@ -207,7 +207,7 @@ async def monitor_current_session(self) -> None:
207207
f"(error: {type(e).__name__}, message: {e})"
208208
)
209209
except asyncio.CancelledError:
210-
if self.logger.level <= logging.DEBUG:
210+
if self.logger.isEnabledFor(logging.DEBUG):
211211
self.logger.debug(f"The monitor_current_session task for {session_id} is now cancelled")
212212
raise
213213

@@ -217,7 +217,7 @@ async def receive_messages(self) -> None:
217217
# To avoid such, we access only the session that is active when this loop starts.
218218
session = self.current_session
219219
session_id = self.build_session_id(session) # type: ignore[arg-type]
220-
if self.logger.level <= logging.DEBUG:
220+
if self.logger.isEnabledFor(logging.DEBUG):
221221
self.logger.debug(f"A new receive_messages() execution loop with {session_id} started")
222222
try:
223223
consecutive_error_count = 0
@@ -226,14 +226,14 @@ async def receive_messages(self) -> None:
226226

227227
while not self.closed:
228228
if session != self.current_session:
229-
if self.logger.level <= logging.DEBUG:
229+
if self.logger.isEnabledFor(logging.DEBUG):
230230
self.logger.debug(f"The running receive_messages task for {session_id} is now cancelled")
231231
break
232232
try:
233233
message: WSMessage = await session.receive() # type: ignore[union-attr]
234234
# just in case, checking if the value is not None
235235
if message is not None:
236-
if self.logger.level <= logging.DEBUG:
236+
if self.logger.isEnabledFor(logging.DEBUG):
237237
# The following logging prints every single received message
238238
# except empty message data ones.
239239
m_type = WSMsgType(message.type)
@@ -308,7 +308,7 @@ async def receive_messages(self) -> None:
308308
else:
309309
await asyncio.sleep(consecutive_error_count)
310310
except asyncio.CancelledError:
311-
if self.logger.level <= logging.DEBUG:
311+
if self.logger.isEnabledFor(logging.DEBUG):
312312
self.logger.debug(f"The running receive_messages task for {session_id} is now cancelled")
313313
raise
314314

@@ -326,7 +326,7 @@ async def is_connected(self) -> bool:
326326
and not self.current_session.closed
327327
and not await self.is_ping_pong_failing()
328328
)
329-
if self.logger.level <= logging.DEBUG and connected is False:
329+
if self.logger.isEnabledFor(logging.DEBUG) and connected is False:
330330
# Prints more detailed information about the inactive connection
331331
is_ping_pong_failing = await self.is_ping_pong_failing()
332332
session_id = await self.session_id()
@@ -387,26 +387,26 @@ async def connect(self):
387387
self.logger.info(f"A new session ({session_id}) has been established")
388388

389389
# The first ping from the new connection
390-
if self.logger.level <= logging.DEBUG:
390+
if self.logger.isEnabledFor(logging.DEBUG):
391391
self.logger.debug(f"Sending a ping message with the newly established connection ({session_id})...")
392392
t = time.time()
393393
await self.current_session.ping(f"sdk-ping-pong:{t}".encode("utf-8"))
394394

395395
if self.current_session_monitor is not None:
396396
self.current_session_monitor.cancel()
397397
self.current_session_monitor = asyncio.ensure_future(self.monitor_current_session())
398-
if self.logger.level <= logging.DEBUG:
398+
if self.logger.isEnabledFor(logging.DEBUG):
399399
self.logger.debug(f"A new monitor_current_session() executor has been recreated for {session_id}")
400400

401401
if self.message_receiver is not None:
402402
self.message_receiver.cancel()
403403
self.message_receiver = asyncio.ensure_future(self.receive_messages())
404-
if self.logger.level <= logging.DEBUG:
404+
if self.logger.isEnabledFor(logging.DEBUG):
405405
self.logger.debug(f"A new receive_messages() executor has been recreated for {session_id}")
406406
break
407407
except Exception as e:
408408
if self.closed:
409-
if self.logger.level <= logging.DEBUG:
409+
if self.logger.isEnabledFor(logging.DEBUG):
410410
self.logger.debug(f"Stopped connecting because the client is closed (error: {e})")
411411
return
412412
self.logger.exception(f"Failed to connect (error: {e}); Retrying...")
@@ -420,14 +420,14 @@ async def disconnect(self):
420420

421421
async def send_message(self, message: str):
422422
session_id = await self.session_id()
423-
if self.logger.level <= logging.DEBUG:
423+
if self.logger.isEnabledFor(logging.DEBUG):
424424
self.logger.debug(f"Sending a message: {message} from session: {session_id}")
425425
try:
426426
await self.current_session.send_str(message) # type: ignore[union-attr]
427427
except ConnectionError as e:
428428
# We rarely get this exception while replacing the underlying WebSocket connections.
429429
# We can do one more try here as the self.current_session should be ready now.
430-
if self.logger.level <= logging.DEBUG:
430+
if self.logger.isEnabledFor(logging.DEBUG):
431431
self.logger.debug(
432432
f"Failed to send a message (error: {e}, message: {message}, session: {session_id})"
433433
" as the underlying connection was replaced. Retrying the same request only one time..."

‎slack_sdk/socket_mode/async_client.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ async def send_socket_mode_response(self, response: Union[Dict[str, Any], Socket
106106

107107
async def enqueue_message(self, message: str):
108108
await self.message_queue.put(message)
109-
if self.logger.level <= logging.DEBUG:
109+
if self.logger.isEnabledFor(logging.DEBUG):
110110
queue_size = self.message_queue.qsize()
111111
session_id = await self.session_id()
112112
self.logger.debug(f"A new message enqueued (current queue size: {queue_size}, session: {session_id})")
@@ -140,7 +140,7 @@ async def process_message(self):
140140
async def run_message_listeners(self, message: dict, raw_message: str) -> None:
141141
session_id = await self.session_id()
142142
type, envelope_id = message.get("type"), message.get("envelope_id")
143-
if self.logger.level <= logging.DEBUG:
143+
if self.logger.isEnabledFor(logging.DEBUG):
144144
self.logger.debug(
145145
f"Message processing started (type: {type}, envelope_id: {envelope_id}, session: {session_id})"
146146
)
@@ -166,7 +166,7 @@ async def run_message_listeners(self, message: dict, raw_message: str) -> None:
166166
except Exception as e:
167167
self.logger.exception(f"Failed to run message listeners: {e}, session: {session_id}")
168168
finally:
169-
if self.logger.level <= logging.DEBUG:
169+
if self.logger.isEnabledFor(logging.DEBUG):
170170
self.logger.debug(
171171
f"Message processing completed (type: {type}, envelope_id: {envelope_id}, session: {session_id})"
172172
)

‎slack_sdk/socket_mode/builtin/client.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,14 +197,14 @@ def disconnect(self) -> None:
197197
self.current_session.close()
198198

199199
def send_message(self, message: str) -> None:
200-
if self.logger.level <= logging.DEBUG:
200+
if self.logger.isEnabledFor(logging.DEBUG):
201201
self.logger.debug(f"Sending a message (session id: {self.session_id()}, message: {message})")
202202
try:
203203
self.current_session.send(message) # type: ignore[union-attr]
204204
except SlackClientNotConnectedError as e:
205205
# We rarely get this exception while replacing the underlying WebSocket connections.
206206
# We can do one more try here as the self.current_session should be ready now.
207-
if self.logger.level <= logging.DEBUG:
207+
if self.logger.isEnabledFor(logging.DEBUG):
208208
self.logger.debug(
209209
f"Failed to send a message (session id: {self.session_id()}, error: {e}, message: {message})"
210210
" as the underlying connection was replaced. Retrying the same request only one time..."
@@ -235,7 +235,7 @@ def close(self) -> None:
235235
self.message_workers.shutdown()
236236

237237
def _on_message(self, message: str):
238-
if self.logger.level <= logging.DEBUG:
238+
if self.logger.isEnabledFor(logging.DEBUG):
239239
self.logger.debug(f"on_message invoked: (message: {debug_redacted_message_string(message)})")
240240
self.enqueue_message(message)
241241
for listener in self.on_message_listeners:
@@ -254,7 +254,7 @@ def _on_error(self, error: Exception):
254254
listener(error)
255255

256256
def _on_close(self, code: int, reason: Optional[str] = None):
257-
if self.logger.level <= logging.DEBUG:
257+
if self.logger.isEnabledFor(logging.DEBUG):
258258
self.logger.debug(f"on_close invoked (session id: {self.session_id()})")
259259
if self.auto_reconnect_enabled:
260260
self.logger.info(f"Received CLOSE event. Reconnecting... (session id: {self.session_id()})")

‎slack_sdk/socket_mode/client.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ def send_socket_mode_response(self, response: Union[Dict[str, Any], SocketModeRe
9797

9898
def enqueue_message(self, message: str):
9999
self.message_queue.put(message)
100-
if self.logger.level <= logging.DEBUG:
100+
if self.logger.isEnabledFor(logging.DEBUG):
101101
self.logger.debug(f"A new message enqueued (current queue size: {self.message_queue.qsize()})")
102102

103103
def process_message(self):
104104
try:
105105
raw_message = self.message_queue.get(timeout=1)
106-
if self.logger.level <= logging.DEBUG:
106+
if self.logger.isEnabledFor(logging.DEBUG):
107107
self.logger.debug(f"A message dequeued (current queue size: {self.message_queue.qsize()})")
108108

109109
if raw_message is not None:
@@ -123,7 +123,7 @@ def _run_message_listeners():
123123

124124
def run_message_listeners(self, message: dict, raw_message: str) -> None:
125125
type, envelope_id = message.get("type"), message.get("envelope_id")
126-
if self.logger.level <= logging.DEBUG:
126+
if self.logger.isEnabledFor(logging.DEBUG):
127127
self.logger.debug(f"Message processing started (type: {type}, envelope_id: {envelope_id})")
128128
try:
129129
# just in case, adding the same logic to reconnect here
@@ -148,7 +148,7 @@ def run_message_listeners(self, message: dict, raw_message: str) -> None:
148148
except Exception as e:
149149
self.logger.exception(f"Failed to run message listeners: {e}")
150150
finally:
151-
if self.logger.level <= logging.DEBUG:
151+
if self.logger.isEnabledFor(logging.DEBUG):
152152
self.logger.debug(f"Message processing completed (type: {type}, envelope_id: {envelope_id})")
153153

154154
def process_messages(self) -> None:

‎slack_sdk/socket_mode/websocket_client/__init__.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ def is_connected(self) -> bool:
143143

144144
def connect(self) -> None:
145145
def on_open(ws: WebSocketApp):
146-
if self.logger.level <= logging.DEBUG:
146+
if self.logger.isEnabledFor(logging.DEBUG):
147147
self.logger.debug("on_open invoked")
148148
for listener in self.on_open_listeners:
149149
listener(ws)
150150

151151
def on_message(ws: WebSocketApp, message: str):
152-
if self.logger.level <= logging.DEBUG:
152+
if self.logger.isEnabledFor(logging.DEBUG):
153153
self.logger.debug(f"on_message invoked: (message: {debug_redacted_message_string(message)})")
154154
self.enqueue_message(message)
155155
for listener in self.on_message_listeners:
@@ -165,7 +165,7 @@ def on_close(
165165
close_status_code: Optional[int] = None,
166166
close_msg: Optional[str] = None,
167167
):
168-
if self.logger.level <= logging.DEBUG:
168+
if self.logger.isEnabledFor(logging.DEBUG):
169169
self.logger.debug(f"on_close invoked: (code: {close_status_code}, message: {close_msg})")
170170
if self.auto_reconnect_enabled:
171171
self.logger.info("Received CLOSE event. Reconnecting...")
@@ -201,14 +201,14 @@ def disconnect(self) -> None:
201201
self.current_session.close()
202202

203203
def send_message(self, message: str) -> None:
204-
if self.logger.level <= logging.DEBUG:
204+
if self.logger.isEnabledFor(logging.DEBUG):
205205
self.logger.debug(f"Sending a message: {message}")
206206
try:
207207
self.current_session.send(message) # type: ignore[union-attr]
208208
except WebSocketException as e:
209209
# We rarely get this exception while replacing the underlying WebSocket connections.
210210
# We can do one more try here as the self.current_session should be ready now.
211-
if self.logger.level <= logging.DEBUG:
211+
if self.logger.isEnabledFor(logging.DEBUG):
212212
self.logger.debug(
213213
f"Failed to send a message (error: {e}, message: {message})"
214214
" as the underlying connection was replaced. Retrying the same request only one time..."

‎slack_sdk/socket_mode/websockets/__init__.py‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ async def monitor_current_session(self) -> None:
123123
# To avoid such, we access only the session that is active when this loop starts.
124124
session: ClientConnection = self.current_session # type: ignore[assignment]
125125
session_id: str = await self.session_id()
126-
if self.logger.level <= logging.DEBUG:
126+
if self.logger.isEnabledFor(logging.DEBUG):
127127
self.logger.debug(f"A new monitor_current_session() execution loop for {session_id} started")
128128
try:
129129
while not self.closed:
130130
if session != self.current_session:
131-
if self.logger.level <= logging.DEBUG:
131+
if self.logger.isEnabledFor(logging.DEBUG):
132132
self.logger.debug(f"The monitor_current_session task for {session_id} is now cancelled")
133133
break
134134
await asyncio.sleep(self.ping_interval)
@@ -142,7 +142,7 @@ async def monitor_current_session(self) -> None:
142142
f"(error: {type(e).__name__}, message: {e}, session: {session_id})"
143143
)
144144
except asyncio.CancelledError:
145-
if self.logger.level <= logging.DEBUG:
145+
if self.logger.isEnabledFor(logging.DEBUG):
146146
self.logger.debug(f"The monitor_current_session task for {session_id} is now cancelled")
147147
raise
148148

@@ -153,20 +153,20 @@ async def receive_messages(self) -> None:
153153
session: ClientConnection = self.current_session # type: ignore[assignment]
154154
session_id: str = await self.session_id()
155155
consecutive_error_count = 0
156-
if self.logger.level <= logging.DEBUG:
156+
if self.logger.isEnabledFor(logging.DEBUG):
157157
self.logger.debug(f"A new receive_messages() execution loop with {session_id} started")
158158
try:
159159
while not self.closed:
160160
if session != self.current_session:
161-
if self.logger.level <= logging.DEBUG:
161+
if self.logger.isEnabledFor(logging.DEBUG):
162162
self.logger.debug(f"The running receive_messages task for {session_id} is now cancelled")
163163
break
164164
try:
165165
message = await session.recv()
166166
if message is not None:
167167
if isinstance(message, bytes):
168168
message = message.decode("utf-8")
169-
if self.logger.level <= logging.DEBUG:
169+
if self.logger.isEnabledFor(logging.DEBUG):
170170
self.logger.debug(
171171
f"Received message: {debug_redacted_message_string(message)}, session: {session_id}"
172172
)
@@ -182,7 +182,7 @@ async def receive_messages(self) -> None:
182182
else:
183183
await asyncio.sleep(consecutive_error_count)
184184
except asyncio.CancelledError:
185-
if self.logger.level <= logging.DEBUG:
185+
if self.logger.isEnabledFor(logging.DEBUG):
186186
self.logger.debug(f"The running receive_messages task for {session_id} is now cancelled")
187187
raise
188188

@@ -209,14 +209,14 @@ async def connect(self):
209209
self.current_session_monitor.cancel()
210210
self.current_session_monitor = asyncio.ensure_future(self.monitor_current_session())
211211

212-
if self.logger.level <= logging.DEBUG:
212+
if self.logger.isEnabledFor(logging.DEBUG):
213213
self.logger.debug(f"A new monitor_current_session() executor has been recreated for {session_id}")
214214

215215
if self.message_receiver is not None:
216216
self.message_receiver.cancel()
217217
self.message_receiver = asyncio.ensure_future(self.receive_messages())
218218

219-
if self.logger.level <= logging.DEBUG:
219+
if self.logger.isEnabledFor(logging.DEBUG):
220220
self.logger.debug(f"A new receive_messages() executor has been recreated for {session_id}")
221221

222222
if old_session is not None:
@@ -231,14 +231,14 @@ async def disconnect(self):
231231
async def send_message(self, message: str):
232232
session = self.current_session
233233
session_id = self.build_session_id(session) # type: ignore[arg-type]
234-
if self.logger.level <= logging.DEBUG:
234+
if self.logger.isEnabledFor(logging.DEBUG):
235235
self.logger.debug(f"Sending a message: {message}, session: {session_id}")
236236
try:
237237
await session.send(message) # type: ignore[union-attr]
238238
except WebSocketException as e:
239239
# We rarely get this exception while replacing the underlying WebSocket connections.
240240
# We can do one more try here as the self.current_session should be ready now.
241-
if self.logger.level <= logging.DEBUG:
241+
if self.logger.isEnabledFor(logging.DEBUG):
242242
self.logger.debug(
243243
f"Failed to send a message (error: {e}, message: {message}, session: {session_id})"
244244
" as the underlying connection was replaced. Retrying the same request only one time..."

0 commit comments

Comments
 (0)