python (3.11.7)
       1  """Customize logging
       2  
       3  Defines custom logger class for the `logger.verbose(...)` method.
       4  
       5  init_logging() must be called before any other modules that call logging.getLogger.
       6  """
       7  
       8  import logging
       9  from typing import Any, cast
      10  
      11  # custom log level for `--verbose` output
      12  # between DEBUG and INFO
      13  VERBOSE = 15
      14  
      15  
      16  class ESC[4;38;5;81mVerboseLogger(ESC[4;38;5;149mloggingESC[4;38;5;149m.ESC[4;38;5;149mLogger):
      17      """Custom Logger, defining a verbose log-level
      18  
      19      VERBOSE is between INFO and DEBUG.
      20      """
      21  
      22      def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None:
      23          return self.log(VERBOSE, msg, *args, **kwargs)
      24  
      25  
      26  def getLogger(name: str) -> VerboseLogger:
      27      """logging.getLogger, but ensures our VerboseLogger class is returned"""
      28      return cast(VerboseLogger, logging.getLogger(name))
      29  
      30  
      31  def init_logging() -> None:
      32      """Register our VerboseLogger and VERBOSE log level.
      33  
      34      Should be called before any calls to getLogger(),
      35      i.e. in pip._internal.__init__
      36      """
      37      logging.setLoggerClass(VerboseLogger)
      38      logging.addLevelName(VERBOSE, "VERBOSE")