/ letsencrypt / colored_logging.py
colored_logging.py
 1  """A formatter and StreamHandler for colorizing logging output."""
 2  import logging
 3  import sys
 4  
 5  from letsencrypt import le_util
 6  
 7  
 8  class StreamHandler(logging.StreamHandler):
 9      """Sends colored logging output to a stream.
10  
11      If the specified stream is not a tty, the class works like the
12      standard logging.StreamHandler. Default red_level is logging.WARNING.
13  
14      :ivar bool colored: True if output should be colored
15      :ivar bool red_level: The level at which to output
16  
17      """
18  
19      def __init__(self, stream=None):
20          if sys.version_info < (2, 7):
21              # pragma: no cover
22              # pylint: disable=non-parent-init-called
23              logging.StreamHandler.__init__(self, stream)
24          else:
25              super(StreamHandler, self).__init__(stream)
26          self.colored = (sys.stderr.isatty() if stream is None else
27                          stream.isatty())
28          self.red_level = logging.WARNING
29  
30      def format(self, record):
31          """Formats the string representation of record.
32  
33          :param logging.LogRecord record: Record to be formatted
34  
35          :returns: Formatted, string representation of record
36          :rtype: str
37  
38          """
39          out = (logging.StreamHandler.format(self, record)
40                 if sys.version_info < (2, 7)
41                 else super(StreamHandler, self).format(record))
42          if self.colored and record.levelno >= self.red_level:
43              return ''.join((le_util.ANSI_SGR_RED, out, le_util.ANSI_SGR_RESET))
44          else:
45              return out