fix: suppress Uvicorn WebSocket rejection noise in logs
Unknown-path WS probes (e.g. /waapi) generate three INFO lines from uvicorn.access + uvicorn.error on every attempt. Install a logging.Filter on both loggers at startup to drop: - access log entries: "WebSocket <path>" 403 - error log entries: "connection rejected ..." / "connection closed" These are handled gracefully by _SPAStaticFiles; the logs add no value. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
25
bot.py
25
bot.py
@@ -40,6 +40,26 @@ except Exception:
|
|||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class _UvicornWSNoiseFilter(logging.Filter):
|
||||||
|
"""Suppress per-connection WebSocket rejection noise from Uvicorn.
|
||||||
|
|
||||||
|
When an unknown path (e.g. /waapi probes) hits the server as a WebSocket
|
||||||
|
upgrade, Uvicorn logs three lines at INFO:
|
||||||
|
- uvicorn.access: '... "WebSocket /waapi" 403'
|
||||||
|
- uvicorn.error: 'connection rejected (403 Forbidden)'
|
||||||
|
- uvicorn.error: 'connection closed'
|
||||||
|
These are expected and handled gracefully; we just don't want them filling
|
||||||
|
the log.
|
||||||
|
"""
|
||||||
|
def filter(self, record: logging.LogRecord) -> bool:
|
||||||
|
msg = record.getMessage()
|
||||||
|
if '"WebSocket ' in msg and ' 403' in msg:
|
||||||
|
return False
|
||||||
|
if msg.startswith("connection rejected") or msg == "connection closed":
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
_PROJECT_ROOT = Path(__file__).resolve().parent
|
_PROJECT_ROOT = Path(__file__).resolve().parent
|
||||||
|
|
||||||
|
|
||||||
@@ -192,6 +212,11 @@ async def main() -> None:
|
|||||||
loop="none", # use existing event loop
|
loop="none", # use existing event loop
|
||||||
)
|
)
|
||||||
uvi_server = uvicorn.Server(uvi_config)
|
uvi_server = uvicorn.Server(uvi_config)
|
||||||
|
|
||||||
|
_ws_filter = _UvicornWSNoiseFilter()
|
||||||
|
logging.getLogger("uvicorn.access").addFilter(_ws_filter)
|
||||||
|
logging.getLogger("uvicorn.error").addFilter(_ws_filter)
|
||||||
|
|
||||||
coroutines.append(uvi_server.serve())
|
coroutines.append(uvi_server.serve())
|
||||||
logger.info(
|
logger.info(
|
||||||
"Web UI enabled at http://%s:%d", config.web_host, config.web_port
|
"Web UI enabled at http://%s:%d", config.web_host, config.web_port
|
||||||
|
|||||||
Reference in New Issue
Block a user