From a5233c7f41119eaf20fb8e2e4ebe3ad020918be4 Mon Sep 17 00:00:00 2001 From: Paul Hebble Date: Sat, 19 Oct 2024 13:31:37 -0500 Subject: [PATCH] Exclude internetarchive's internal logging from Discord --- netkan/netkan/notifications.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/netkan/netkan/notifications.py b/netkan/netkan/notifications.py index a0c0af2..07c4044 100644 --- a/netkan/netkan/notifications.py +++ b/netkan/netkan/notifications.py @@ -1,10 +1,14 @@ import os import sys +import re import logging from typing import Iterable, Type, Optional from types import TracebackType import discord +# A regex to prevent internetarchive's errors from going to Discord +NOT_IA_PATTERN = re.compile('^(?!.*internetarchive)') + def catch_all(type_: Type[BaseException], value: BaseException, traceback: Optional[TracebackType]) -> None: # Log an error for Discord @@ -16,16 +20,19 @@ def catch_all(type_: Type[BaseException], value: BaseException, traceback: Optio class DiscordLogHandler(logging.Handler): - def __init__(self, webhook_id: str, webhook_token: str) -> None: + def __init__(self, webhook_id: str, webhook_token: str, + logger_filter: re.Pattern[str]) -> None: super().__init__() self.webhook = discord.Webhook.partial(webhook_id, webhook_token, adapter=discord.RequestsWebhookAdapter()) + self.logger_filter = logger_filter def emit(self, record: logging.LogRecord) -> None: - fmt = self.format(record) - as_code = "\n" in fmt - for part in self._message_parts(fmt, as_code): - self.webhook.send(part) + if self.logger_filter.match(record.name): + fmt = self.format(record) + as_code = "\n" in fmt + for part in self._message_parts(fmt, as_code): + self.webhook.send(part) @staticmethod def _message_parts(msg: str, as_code: bool, max_len: int = 2000) -> Iterable[str]: @@ -47,7 +54,7 @@ def setup_log_handler(debug: bool = False) -> bool: discord_webhook_id = os.environ.get('DISCORD_WEBHOOK_ID') discord_webhook_token = os.environ.get('DISCORD_WEBHOOK_TOKEN') if discord_webhook_id and discord_webhook_token: - handler = DiscordLogHandler(discord_webhook_id, discord_webhook_token) + handler = DiscordLogHandler(discord_webhook_id, discord_webhook_token, NOT_IA_PATTERN) handler.setLevel(logging.ERROR) logging.getLogger('').addHandler(handler) return True