def format(self, record): msg = super().format(record) if not self.stream_is_tty: return msg m = split_log.match(msg) log_color = LOG_FORMATS.get(record.levelno, sformat.red) if m: time = sformat(m.groups()[0], sformat.magenta) return time + sformat(msg[m.end():], log_color) else: return sformat(msg, log_color)
def formatMessage(self, record): msg = super().formatMessage(record) if msg[0] != '{': return msg # json from AccessLogger obj = json.loads(msg) if self.stream_is_tty: # in future we can do clever things about colouring the message based on status code msg = '{} {} {}'.format( sformat(obj['time'], sformat.magenta), sformat(obj['prefix'], sformat.blue), sformat(obj['msg'], sformat.dim if obj['dim'] else sformat.reset), ) else: msg = '{time} {prefix} {msg}'.format(**obj) details = getattr(record, 'details', None) if details: msg = 'details: {}\n{}'.format( pformat(details, highlight=self.stream_is_tty), msg) return msg
def log(self, request, response, time): msg = '{method} {path} {code} {size} {ms:0.0f}ms'.format( method=request.method, path=request.path, code=response.status, size=self.format_size(response.body_length), ms=time * 1000, ) time_str = (datetime.now() - timedelta(seconds=time)).strftime('[%H:%M:%S]') if sformat: time_str = sformat(time_str, sformat.magenta) if response.status >= 500: msg = sformat(msg, sformat.red) elif response.status >= 400: msg = sformat(msg, sformat.yellow) elif response.status == 304: msg = sformat(msg, sformat.dim) elif request.method == METH_POST: msg = sformat(msg, sformat.green) self.logger.info(time_str + ' ' + msg)