import logging.handlers
import os
import sys
-from typing import Optional
+from typing import Any, Optional
from knot_resolver.datamodel.config_schema import KresConfig
from knot_resolver.datamodel.logging_schema import LogTargetEnum
from .constants import LOGGING_LEVEL_STARTUP
-logger = logging.getLogger(__name__)
-
NOTICE_LEVEL = (logging.WARNING + logging.INFO) // 2
NOTICE_NAME = "NOTICE"
}
+class LoggerWithNotice(logging.Logger):
+ """Custom logger with additional notice log and level."""
+
+ def notice(self: logging.Logger, msg: Any, *args: Any, **kwargs: Any) -> None:
+ if self.isEnabledFor(NOTICE_LEVEL):
+ self._log(NOTICE_LEVEL, msg, args, **kwargs)
+
+
+logging.addLevelName(NOTICE_LEVEL, NOTICE_NAME)
+# set LoggerWithNotice as default logger class
+logging.setLoggerClass(LoggerWithNotice)
+
+logger = logging.getLogger(__name__)
+
+
def get_log_format(config: KresConfig) -> str:
"""
Based on an environment variable $KRES_SUPRESS_LOG_PREFIX, returns the appropriate format string for logger.