Skip to content

Commit e5cef4c

Browse files
committed
Add logging filters, apply the filters and address PR feedback see HEA-752
1 parent bcd480c commit e5cef4c

File tree

3 files changed

+85
-3
lines changed

3 files changed

+85
-3
lines changed

apps/common/consumers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ async def connect(self):
5858
try:
5959
self.websocket = await websockets.connect(
6060
target_url,
61-
max_size=2097152,
61+
max_size=10485760,
6262
ping_interval=20,
6363
subprotocols=subprotocols if subprotocols else None,
6464
)

apps/common/logging_filters.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import logging
2+
3+
4+
class SuppressWebSocketPings(logging.Filter):
5+
6+
def filter(self, record):
7+
suppress_phrases = [
8+
"sending keepalive ping",
9+
"received keepalive pong",
10+
"> PING",
11+
"< PONG",
12+
"% sending keepalive",
13+
"% received keepalive",
14+
"ASGI 'lifespan' protocol appears unsupported.",
15+
]
16+
17+
message = record.getMessage()
18+
19+
for phrase in suppress_phrases:
20+
if phrase in message:
21+
return False # Don't log this message
22+
23+
return True
24+
25+
26+
class SuppressRevProxyNoise(logging.Filter):
27+
28+
def filter(self, record):
29+
# Suppress these RevProxy messages
30+
suppress_phrases = [
31+
"ProxyView created",
32+
"Normalizing response headers",
33+
"Checking for invalid cookies",
34+
"Starting streaming HTTP Response",
35+
]
36+
37+
message = record.getMessage()
38+
39+
for phrase in suppress_phrases:
40+
if phrase in message:
41+
return False
42+
43+
return True

hea/settings/base.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@
253253
},
254254
"filters": {
255255
"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"},
256+
"suppress_ws_pings": {
257+
"()": "common.logging_filters.SuppressWebSocketPings",
258+
},
259+
"suppress_revproxy_noise": {
260+
"()": "common.logging_filters.SuppressRevProxyNoise",
261+
},
256262
},
257263
"handlers": {
258264
"logfile": {
@@ -269,6 +275,7 @@
269275
"stream": sys.stdout,
270276
"class": "logging.StreamHandler",
271277
"formatter": env.str("LOG_FORMATTER", "standard"),
278+
"filters": ["suppress_ws_pings", "suppress_revproxy_noise"],
272279
},
273280
"mail_admins": {
274281
"level": "ERROR",
@@ -286,8 +293,40 @@
286293
"urllib3": {"handlers": ["console", "logfile"], "level": "INFO", "propagate": False},
287294
"common.models": {"handlers": ["console", "logfile"], "level": "INFO", "propagate": False},
288295
"common.signals": {"handlers": ["console", "logfile"], "level": "INFO", "propagate": False},
289-
"uvicorn.error": {"handlers": ["console"], "level": "WARNING", "propagate": False},
290-
"uvicorn.access": {"handlers": ["console"], "level": "WARNING", "propagate": False},
296+
"uvicorn": {
297+
"handlers": ["console"],
298+
"level": "INFO",
299+
"propagate": False,
300+
},
301+
"uvicorn.error": {
302+
"handlers": ["console"],
303+
"level": "DEBUG",
304+
"propagate": False,
305+
"filters": ["suppress_ws_pings"],
306+
},
307+
"uvicorn.access": {
308+
"handlers": ["console"],
309+
"level": "INFO",
310+
"propagate": False,
311+
},
312+
"revproxy": {
313+
"handlers": ["console"],
314+
"level": "INFO",
315+
"propagate": False,
316+
"filters": ["suppress_revproxy_noise"],
317+
},
318+
"revproxy.view": {
319+
"handlers": ["console"],
320+
"level": "INFO",
321+
"propagate": False,
322+
"filters": ["suppress_revproxy_noise"],
323+
},
324+
"revproxy.response": {
325+
"handlers": ["console"],
326+
"level": "INFO",
327+
"propagate": False,
328+
"filters": ["suppress_revproxy_noise"],
329+
},
291330
},
292331
# Keep root at DEBUG and use the `level` on the handler to control logging output,
293332
# so that additional handlers can be used to get additional detail, e.g. `common.resources.LoggingResourceMixin`

0 commit comments

Comments
 (0)