/ 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