Source code for jina.logging.formatter

import json
import re
from copy import copy
from logging import Formatter, LogRecord


[docs]class PlainFormatter(Formatter): """Remove all control chars from the log and format it as plain text, also restrict the max-length of msg to 512."""
[docs] def format(self, record): """ Format the LogRecord by removing all control chars and plain text, and restrict the max-length of msg to 512. :param record: A LogRecord object. :return:: Formatted plain LogRecord. """ cr = copy(record) if isinstance(cr.msg, str): cr.msg = re.sub(r'\u001b\[.*?[@-~]', '', str(cr.msg))[:512] return super().format(cr)
[docs]class JsonFormatter(Formatter): """Format the log message as a JSON object so that it can be later used/parsed in browser with javascript.""" KEYS = { 'created', 'filename', 'funcName', 'levelname', 'lineno', 'msg', 'module', 'name', 'pathname', 'process', 'thread', 'processName', 'threadName', 'log_id', } #: keys to extract from the log
[docs] def format(self, record: 'LogRecord'): """ Format the log message as a JSON object. :param record: A LogRecord object. :return:: LogRecord with JSON format. """ cr = copy(record) cr.msg = re.sub(r'\u001b\[.*?[@-~]', '', str(cr.msg)) return json.dumps( {k: getattr(cr, k) for k in self.KEYS if hasattr(cr, k)}, sort_keys=True )
[docs]class ProfileFormatter(Formatter): """Format the log message as JSON object and add the current used memory into it."""
[docs] def format(self, record: 'LogRecord'): """ Format the log message as JSON object and add the current used memory. :param record: A LogRecord object. :return:: Return JSON formatted log if msg of LogRecord is dict type else return empty. """ from jina.logging.profile import used_memory cr = copy(record) if isinstance(cr.msg, dict): cr.msg.update( {k: getattr(cr, k) for k in ['created', 'module', 'process', 'thread']} ) cr.msg['memory'] = used_memory(unit=1) return json.dumps(cr.msg, sort_keys=True) else: return ''